PS (C, C++)

[백준/C & C++] 1259 펠린드롬수

최연재 2022. 9. 5. 16:20

https://www.acmicpc.net/problem/1259

 

1259번: 팰린드롬수

입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.

www.acmicpc.net

코드 (C)

#include <stdio.h>
#include <math.h>

int countlen(int n)
{
	int i =0 ;
	while (n>0)
	{
		n /= 10;
		i++;
	}
	return i;
}

int reverse(int n, int len)
{
	int result = 0;
	while (n > 0)
	{
		result += (n % 10) * pow(10, len-1);
		len--;
		n /= 10;
	}
	return result;
}
int main()
{
	int a, len;
	while (1)
	{
		scanf("%d", &a);
		if (a == 0) break;
		else
		{
			len = countlen(a);
			if (a == reverse(a, len))printf("yes\n"); 
			else printf("no\n");
		}
	}
	return 0;
}

코드 (C++)

#include <iostream>
#include <cmath>
using namespace std;

int returnLen(int n)
{
	int i = 0;
	while (n > 0)
	{
		n /= 10;
		i++;
	}
	return i;
}

int returnValue(int n, int len)
{
	int result = 0;
	while (n > 0)
	{
		result += (n % 10) * pow(10, len - 1);
		len--;
		n /= 10;
	}
	return result;
}

int main()
{
	int n;
	while (1)
	{
		cin >> n;
		if (n == 0) break;
		else
		{
			if (n == returnValue(n, returnLen(n))) cout << "yes\n";
			else cout << "no\n";
		}
	}
	return 0;
}

코드설명 

입력이 0이 될 때까지 반복문을 돌면서 입력을 받는다. 

입력된 값이 0이 아니라면, returnValue 함수로 n을 뒤집은 수를 구하고 입력과 비교한다. n과 retrunValue의 값이 같다면 yes를 출력하고, 그렇지 않다면 no를 출력한다. 

 

returnValue 함수는 입력 값과 returnLen(n) 값을 인수로 받는다. returnLen은 n이 총 몇 자리의 수인지를 반환하는 함수이다. returnLen 함수에서는 값이 0보다 클 때까지 계속 10으로 나누면서 자릿수를 센다.

 

returnValue 함수는 n의 나머지에 10의 len-1승을 곱해서 수를 뒤집어나간다. 반복문의 끝에서 n을 10으로 나누고, len을 1씩 빼면서 값을 만들어나간다. 

느낀 점

처음에 착각해서 자릿수가 짝수이면 펠린드롬수가 될 수 없다고 생각했다. 그래서 길이를 구해서 짝수면 무조건 no를 출력하게 코드를 작성했는데, 1111, 22같은 경우가 반례가 되기 때문에, 해당 조건문을 삭제하고 다시 코드를 작성했다. 반례를 계속 생각해보면서 코드를 작성해야한다는 것을 다시 한 번 느낀 문제였다. 

'PS (C, C++)' 카테고리의 다른 글

[백준/C & C++] 5565 영수증  (0) 2022.09.07
[백준/C & C++] 2851 슈퍼마리오  (0) 2022.09.05
[백준/C & C++] 3009 네 번째 점  (0) 2022.09.04
[백준/C & C++] 5724 파인만  (0) 2022.09.04
[백준/C & C++] 2920 음계  (0) 2022.09.04