[Algorithm] 1515. 수 이어 쓰기

유지민·2024년 2월 2일
0

Algorithm

목록 보기
20/75
post-thumbnail

1515. 수 이어 쓰기

1515 문제 보기

접근 방식

코드 구현은 쉬웠으나 접근법을 생각하는 데 오래 걸렸던 문제
한 줄로 요약하자면, "같으면 버리고 다음 자릿수 비교"라고 할 수 있다!

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문은 numN의 길이가 양수인 경우에만 유효하다.
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중으로 돌려 처리했다.
▶️ 예제 입력으로부터 예제 출력이 나오도록 이끄는 과정을 코드로 잘 만들어내자...
▶️ 정신줄 꽉 잡고 문제풀기

profile
끊임없이 도전하며 사고하는 주니어 Web 개발자 유지민입니다.

0개의 댓글