Python_알고리즘/Gold V
1334. [Python]다음 팰린드롬
최근영
2023. 9. 17. 16:19
1. 문제
https://www.acmicpc.net/problem/1334
1334번: 다음 팰린드롬 수
팰린드롬 수는 앞으로 읽어도, 뒤로 읽어도 같은 숫자이다. 101, 4, 6666와 같은 숫자는 팰린드롬 수이고, 10, 564, 15452와 같은 숫자는 아니다. 어떤 수 N이 주어질 때, N보다 큰 팰린드롬 수 중에서 가
www.acmicpc.net
2. 접근 방법
- 시간 제한: 2초
- 메모리 제한: 128MB
- 구현
3. 파이썬 코드
N = input()
N = str(int(N) + 1)
# N의 길이 변수에 저장
N_length = len(N)
# N을 슬라이싱해서 변수에 저장할 변수
ans = ""
# N의 길이가 짝수인 경우와 홀수인 경우
if len(N) % 2 == 0:
# 중앙값과 중앙값 이후의 값이 대칭이면 N 출력
if N[:N_length//2] == N[N_length:N_length//2-1:-1]:
print(N)
# 외의 경우
else:
# ans 라는 값에 12 / 21 이런 형식으로 값을 저장
ans = N[:N_length//2] + N[:N_length//2][::-1]
# 인트로 변환한 값이 N보다 클 경우 ans 출력
if int(ans) >= int(N):
print(ans)
# 작을 경우
else:
# 가운데 값이 9 인 경우
if N[N_length//2] == "9":
# 가운데 값에 맞는 10**제곱값을 더해준 후
N = str(int(N) + 10**(N_length//2))
# N의 길이가 짝 => 홀로 바뀐 경우
if len(N) > N_length:
# N 의 가운데 값 기준으로 대칭으로 만든 후 출력
N = N[:N_length//2+1] + N[:N_length//2][::-1]
print(N)
# 변하지 않았을 경우 앞뒤 대칭으로 만든 값 출력
else:
print(N[:N_length//2]+N[:N_length//2][::-1])
# 가운데 값이 9가 아닌 경우
else:
# N의 가운데값 +1 한 후 대칭된 값 출력
ans = str(int(ans) + 10**(N_length//2))
print(ans[:N_length//2]+ans[:N_length//2][::-1])
# 홀수인 경우
else:
# 앞뒤 대칭이면 바로 출력
if N[:N_length//2] == N[N_length//2+1:N_length//2-1:-1]:
print(N)
# 대칭이 아닐 경우
else:
# ans 에 대칭되게 값을 넣은 후
ans = N[:N_length//2+1] + N[:N_length//2][::-1]
# ans 와 N의 크기를 비교해 ans 값이 더 큰 경우 ans 바로 출력
if int(ans) >= int(N):
print(ans)
# ans 값이 더 작은 경우
else:
# 만약 중앙값이 9 인 경우
if N[N_length//2] == "9":
# N의 값에 중앙값 +1 해준 값 저장
N = str(int(N) + 10**(N_length//2))
# 더한 N 값이 홀 => 짝이 된 경우
if len(N) > N_length:
# 대칭되게 값 저장 후 출력
N = N[:N_length//2] + N[:N_length//2][::-1]
print(N)
# 외의 경우 대칭되게 값출력
else:
print(N[:N_length//2+1]+N[:N_length//2][::-1])
# 9가 아닌 경우 가운데 값 +1 한 후 대칭되게 출력
else:
print(int(ans) + 10**(N_length//2))
4. 문제를 풀고난 후 생각
- 팰린드롬의 조건을 하나하나 체크해주며 조건을 여러 분기로 나눠서 설정했다.
- 홀, 짝 의 경우 팰린드롬의 조건이 다르기 떄문에 나눠주었고, 각각 중앙값이 9 인 경우와 중앙값을 기준으로 팰린드롬으로 만들었을때 크기를 비교하여 어느 큰지 작은지 등 조건식을 세세히 나눠서 직접 구현했다.
- 별도의 알고리즘을 사용하진 않았고 조건식을 생각하며 예외경우를 직접 제거해주는 방식으로 구현해서 별도의 설명이 필요없이 코드에 주석단 것을 통해서 이해를 할 수 있을 것이다.
5. 문제를 푸는데 도움이 되는 지식
- 구현