코드 구현은 쉬웠으나 접근법을 생각하는 데 오래 걸렸던 문제
한 줄로 요약하자면, "같으면 버리고 다음 자릿수 비교"라고 할 수 있다!
1️⃣ ans
값을 사이클이 돌 때마다 1씩 증가하도록 한다.
이 때, 입력받은 N과 ans의 각 자릿수를 비교해야 하므로 str()
를 통해 문자열로 변경해 준다.
while True:
ans += 1
num = str(ans) # 각 자릿수 비교를 위해 문자열로 변환
2️⃣ num
의 첫번째 원소와 N
의 첫번째 원소를 비교한다. ➡️ N 갱신
ans와 N의 자릿수가 0보다 커야 자릿수 비교가 가능하므로 큰 while
문 내부에서 본 조건으로 한 번 더 반복문을 돌려준다.
이 때, num[0]
(num의 첫번째 원소)와 N[0]
(N의 첫번째 원소)를 비교하여 같은 경우 N[0]
을 버린다.
(N = N[1:]
으로 변경해 다음 자릿수를 비교할 수 있도록 하는 작업)
while len(num) > 0 and len(N) > 0:
if num[0] == N[0]:
N = N[1:]
3️⃣ num 갱신
num = num[1:]
4️⃣ N에 있는 숫자를 모두 다 버리면 N == ''
두번째 while
문은 num
과 N
의 길이가 양수인 경우에만 유효하다.
N과 num의 첫자리를 버리는 작업을 반복하면 N == ''
이 되는 시점이 존재한다.
이 때까지 갱신된 ans
가 정답이 된다!
if N == '':
print(ans)
break
import sys
input = sys.stdin.readline
N = input().rstrip()
ans = 0 # 최솟값
while True:
ans += 1
num = str(ans) # 각 자릿수 비교를 위해 문자열로 변환
while len(num) > 0 and len(N) > 0:
if num[0] == N[0]:
N = N[1:]
num = num[1:]
if N == '':
print(ans)
break
▶️ 이 문제같은 경우 시간 제한이 비교적 널널한 편이었다. 그래서 반복문을 2중으로 돌려 처리했다.
▶️ 예제 입력으로부터 예제 출력이 나오도록 이끄는 과정을 코드로 잘 만들어내자...
▶️ 정신줄 꽉 잡고 문제풀기