이 문제는 주어진 정수를 앞으로 읽어도, 뒤로 읽어도 같은 팰린드롬수인지 아닌지 출력하는 문제입니다.
#include <stdio.h>
#include <string.h>
int main() {
char num[100000];
여러 번의 테스트 케이스로 입력받은 정수가 앞뒤로 같은지 확인하려면 배열로 입력받아서 뒤집는 것이 좋다고 생각되어 num이라는 배열을 선언해 주었습니다. 그리고 문자열 함수들을 사용하기 위해 <string.h> 헤더파일을 추가해 주었습니다.
배열의 길이는 주어지는 정수가 1이상 99999이하라고 주어졌기 때문에 최대 100000으로 설정했습니다.
while(scanf("%s", num) && num[0] != '0'){
int check = 1;
int len = strlen(num);
테스트케이스의 수가 주어지지 않았고, 마지막 줄에는 0이 입력되어야 하기 때문에 배열의 첫 글자가 0이 될 때까지 num을 입력받도록 while문을 만들었습니다. 마지막에 팰린드롬수인지 아닌지를 결정할 check를 1로 초기화하고, 뒤의 코딩에서 편하게 사용할 수 있도록 num 배열의 길이를 len이라는 변수로 만들어줬습니다.
for(int i= 0; i < len / 2; i++){
if(num[i] != num[len-1-i]{
check = 0;
break;
}
}
위에서 만든 while문 안에 서로 대칭인 배열 속 값들을 비교해 주는 for문을 만들었습니다.
점점 가운데로 이동하면서 비교해 주기 위해 i는 배열의 중간까지만 증가하도록 했습니다.
for문 안에 if문으로 배열의 i번째 값과 배열의 길이에서 1과 i만큼 뺀 위치의 값, 즉, 서로 대칭인 숫자들이 같지 않다면 팰린드롬수가 아니라는 뜻으로 check를 0으로 만들어주고 나가게 됩니다.
if(check == 1){
printf("yes\n");
}
else if(check == 0){
printf("no\n");
}
}
return 0;
}
for문 안에서 만약 check가 1이라면 yes를 출력하고 줄바꿈, 0이라면 no를 출력하고 줄바꿈합니다.
코드가 여러번 실행되기 때문에 줄바꿈이 없으면 yes나 no 바로 옆에 다음 테스트할 숫자를 입력하게 됩니다.
마지막으로 위의 while문에서 짠 것처럼 입력에 0이 들어오면 while문을 빠져나와 프로그램을 종료합니다.
처음 이 문제를 마주하고 코드를 짤 때 정수로 입력받은 숫자를 거꾸로 뒤집어서 저장한 다음 원래 입력한 숫자와 비교하는 방법으로 풀려고했습니다. 그렇게 짜다 보니 코드가 길어지기도 하고, 입력받은 숫자의 자릿수를 알 수가 없어서 어려움을 겪었습니다. 그래서 배열로 입력받은 후 대칭하는 배열의 값들을 비교하는 방법으로 코드를 바꾸니 자릿수에 대한 어려움도 해결되고 코드도 훨씬 짧아져서 좋았습니다!
백준 1402번 아무래도이문제는A번난이도인것같다 c (0) | 2023.04.09 |
---|---|
백준 1598번 꼬리를 무는 숫자 나열 c (0) | 2023.04.09 |
백준 8958번 OX퀴즈 c (0) | 2023.04.09 |
백준 2609번 최대공약수와 최소공배수 c (0) | 2023.04.09 |
백준 1546번 평균 c (1) | 2023.04.09 |