상세 컨텐츠

본문 제목

백준 1259번 팰린드롬수 c

알고리즘/C

by 초띠 2023. 4. 8. 23:46

본문

이 문제는 주어진 정수를 앞으로 읽어도, 뒤로 읽어도 같은 팰린드롬수인지 아닌지 출력하는 문제입니다.

 

#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문을 빠져나와 프로그램을 종료합니다.

 

처음 이 문제를 마주하고 코드를 짤 때 정수로 입력받은 숫자를 거꾸로 뒤집어서 저장한 다음 원래 입력한 숫자와 비교하는 방법으로 풀려고했습니다. 그렇게 짜다 보니 코드가 길어지기도 하고, 입력받은 숫자의 자릿수를 알 수가 없어서 어려움을 겪었습니다. 그래서 배열로 입력받은 후 대칭하는 배열의 값들을 비교하는 방법으로 코드를 바꾸니 자릿수에 대한 어려움도 해결되고 코드도 훨씬 짧아져서 좋았습니다!

관련글 더보기