-
1334. [Python]다음 팰린드롬Python_알고리즘/Gold V 2023. 9. 17. 16:19
1. 문제
https://www.acmicpc.net/problem/1334
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. 문제를 푸는데 도움이 되는 지식
- 구현
'Python_알고리즘 > Gold V' 카테고리의 다른 글
15686. [Python]치킨 배달 (0) 2023.09.22 7576. [Python]토마토 (0) 2023.09.17 1038. [Python]감소하는 수 (0) 2023.09.08 1083. [Python]소트 (0) 2023.09.07 5430. [Python]AC (0) 2023.08.08