문제 소개
2020.03.01 기준, 실버2 티어 문제입니다.
조금의 생각만 하면 풀 수 있는 정도의 문제입니다.
문제 링크
https://www.acmicpc.net/problem/1334
아이디어
일단 처음에 낚시당할 만한 것은 주어지는 수보다 큰 숫자 중에 답이 있고, 그렇기 때문에 팰린드롬을 판단할 때 기존의 수에 1을 더하고 시작해야 한다는 것입니다.
그리고 시작한 수가 N자리 수라면 N자리 수 이내에 답이 존재합니다.
예를 들어, 시작한 수가 5자리 수라면 9로만 이루어진 99999가 답이 되기 때문입니다.
핵심적인 내용은 코드의 수석으로 달아놨으니 코드로 봐주시기 바랍니다 :)
코드
# 숫자 입력 및 가공
s = int(input())
s +=1
s = list(map(int,list(str(s))))
# 적당히 10000번쯤 돌리면 수렴함
for i in range(10000):
# 리스트의 절반만 탐색하면 됨(어차피 앞 뒤로 같이 탐색함)
for i in range(0,len(s)//2+1):
# 앞뒤 숫자가 다른데, 뒤의 숫자가 큰 경우는 뒷의 숫자 앞의 수의 변조가 필요함.
if s[i] < s[len(s)-i-1]:
s[len(s)-i-2] += 1
# 그리고나서 뒤의 숫자를 앞의 숫자와 같게 만듬.
s[len(s)-i-1] = s[i]
# 자릿수 올림이 필요한 경우가 있을 수 있으니 수치를 다듬음.
for i in range(len(s)-1,-1,-1):
if s[i] >=10:
s[i],s[i-1] = s[i]%10,s[i-1]+s[i]//10
# 출력
for i in s:
print(i,end="")
Rmx
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 1500: 최대 곱 Solution (0) | 2020.03.02 |
---|---|
[BOJ] 2830: 행성 X3 Solution (0) | 2020.03.02 |
[BOJ] 1024: 수열의 합 Solution (0) | 2020.03.01 |
[BOJ] 4889: 안정적인 문자열 solution (0) | 2020.02.24 |
[BOJ] 2018: 수들의 합 5 solution (0) | 2020.02.24 |