[오늘의 문제] 2026

shlim55·2026년 1월 19일

코딩테스트

목록 보기
220/223

출처: https://www.acmicpc.net/problem/35143
문제

20262026. 누군가에게는 아무 의미가 없을 수 있지만, 고려대학교에게는 매우 특별한 수이다.

고려대학교의 프로그래밍 경시대회 KCPC 2025의 개최일은 2026년 1월 17일이다. 준서는 대회가 개최된다는 사실이 기뻐 날짜를 뚫어져라 보다가 고려대학교의 2026년이 무언가 특별하다는 사실을 깨달았다.

그렇다. 2026년은 고려대학교 개교 121주년인데,
121121은 팰린드롬이고
121=11\sqrt{121} =11,
1212=14641121^2=14641도 팰린드롬이다. 다음에 이런년도가 오려면 무려 10080년 뒤인 12106년이 되어야 한다. 여기서 팰린드롬이란 앞과 뒤 어느 방향으로 읽어도 똑같은 수를 의미한다. 준서는 이처럼 어떤 양의 정수가 팰린드롬이며, 그 수의 제곱근과 제곱도 팰린드롬인 양의 정수일 때, 그 수를 특별한 수라 부르기로 하였다.

홀수
NN이 주어질 때
NN자리 특별한 수 중 가장 작은 수를
XNX_N이라 하면, 고려대학교 개교
XNX_N 주년이 몇 년인지 알아보자.

입력
첫 번째 줄에 홀수
N(1N121)N(1\le N\le 121)이 주어진다.

출력
첫 번째 줄에 정답을 출력한다. 정답이 존재하지 않으면 -1을 출력한다.

예제 입력 1
1
예제 출력 1
1906

N=1N=1일 때,
X1=1X_1=1이고, 고려대학교 개교 1주년은 1906년이다.

예제 입력 2
3
예제 출력 2
2026

N=3N=3일 때,
X3=121X_3=121이고, 고려대학교 개교 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)
profile
A Normal Programmer

0개의 댓글