Koala - 5기/기초 알고리즘 스터디

<5주차> [BOJ / C++] 8611번 - 팰린드롬 숫자

거북이목 2022. 2. 13. 22:57

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

 

8611번: 팰린드롬 숫자

\(n\)을 \(2, 3, \dots, 10\) 진법으로 나타냈을 때, 팰린드롬인 경우가 없다면, "NIE"를 출력한다. 그 외의 경우에는 팰린드롬이 되는 진법 \(b\)와 \(n\)을 \(b\)진법으로 나타낸 수 \(m\)을 출력한다. 출력은

www.acmicpc.net

 

 

문제

 

 

코드

#include <bits/stdc++.h>
using namespace std;
#include <cmath>
#define PI 3.141592653589793
#define ll long long


int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);

	ll n;
	cin >> n;
	ll st = n;
	int cnt=0;
	for (int i=2; i<=10; i++)
	{
		n = st;
		vector<int> v;
		bool flag = true;
		while(n>0)
		{
			v.push_back(n%i);
			n = n/i;
		}
		int len = v.size();
		for (int j=0; j<len; j++)
		{
			if (v[j] == v[len-j-1])
			{
				continue;
			}
			else
			{
				flag = false;
				break;
			}
		}
		if (flag)
		{
			cnt++;
			cout << i << ' ';
			for (int k=0; k<len; k++)
				cout << v[k];
			cout << '\n';
		}
		
	}

	if (cnt==0)
		cout << "NIE";
}

 

 

 

풀이

22~26번째 줄은 입력받은 n을 i(2~10)진법으로 나타내는 것이다.

 

28~39번째 줄은 저장된 벡터에서 대칭위치의 index를 비교하면서 값이 같으면 continue, 다르면 flag를 flase로 바꾸고 반복문을 나간다. 이후 40~47번째 줄에서 flag가 true이면, cnt를 1증가시키고 문제의 조건대로 출력한다.

 

만약, i(2~10)가 반복문을 도는동안 팰린드롬 숫자가 없었다면 cnt는 초기값인 0이 되고 "NIE"를 출력하게된다.

 

주어진 예제를 입력하면 출력이 잘 나오는데, 채점을 돌리면 4%에서 틀렸다고 나오는데 어디서 틀린건지 궁금하다.