출처: https://www.acmicpc.net/problem/35143
문제
. 누군가에게는 아무 의미가 없을 수 있지만, 고려대학교에게는 매우 특별한 수이다.
고려대학교의 프로그래밍 경시대회 KCPC 2025의 개최일은 2026년 1월 17일이다. 준서는 대회가 개최된다는 사실이 기뻐 날짜를 뚫어져라 보다가 고려대학교의 2026년이 무언가 특별하다는 사실을 깨달았다.
그렇다. 2026년은 고려대학교 개교 121주년인데,
은 팰린드롬이고
,
도 팰린드롬이다. 다음에 이런년도가 오려면 무려 10080년 뒤인 12106년이 되어야 한다. 여기서 팰린드롬이란 앞과 뒤 어느 방향으로 읽어도 똑같은 수를 의미한다. 준서는 이처럼 어떤 양의 정수가 팰린드롬이며, 그 수의 제곱근과 제곱도 팰린드롬인 양의 정수일 때, 그 수를 특별한 수라 부르기로 하였다.
홀수
이 주어질 때
자리 특별한 수 중 가장 작은 수를
이라 하면, 고려대학교 개교
주년이 몇 년인지 알아보자.
입력
첫 번째 줄에 홀수
이 주어진다.
출력
첫 번째 줄에 정답을 출력한다. 정답이 존재하지 않으면 -1을 출력한다.
예제 입력 1
1
예제 출력 1
1906
일 때,
이고, 고려대학교 개교 1주년은 1906년이다.
예제 입력 2
3
예제 출력 2
2026
일 때,
이고, 고려대학교 개교 121주년은 2026년이다.
예제 입력 3
5
예제 출력 3
12106
예제 입력 4
7
예제 출력 4
1003906
내가 한 풀이
import sys
# 자릿수 N 입력
N = int(sys.stdin.readline())
# 1. sqrt(X_N)에 해당하는 M의 자릿수 구하기
# N=3 -> M=2자리(11), N=5 -> M=3자리(101)
m_len = (N + 1) // 2
# 2. M 생성 (가장 작은 팰린드롬 형태: 100...001)
if m_len == 1:
# N=1인 경우 (사실상 1자리 특별한 수는 1 뿐임)
M = 1
else:
# 맨 앞 1, 중간에 0이 (m_len-2)개, 맨 뒤 1
M_str = '1' + '0' * (m_len - 2) + '1'
M = int(M_str)
# 3. 특별한 수 X_N은 M의 제곱
X_N = M ** 2
# 4. 고려대 개교 연도(1905)에 X_N 주년을 더함
ans = 1905 + X_N
print(ans)