본문 바로가기

알고리즘/백준 문제 풀이

[Python] 21144번 Missing Number

728x90

https://www.acmicpc.net/problem/21144

 

21144번: Missing Number

You are teaching kindergarten! You wrote down the numbers from $1$ to $n$, in order, on a whiteboard. When you weren’t paying attention, one of your students erased one of the numbers. Can you tell which number your mischievous student erased?

www.acmicpc.net


 

22/09/25

 

 

어렵게 생각하면 어려운 문제이고, 쉽게 생각하면 쉽게 풀 수 있는 좋은 문제인 것 같다.


 

문제 접근 방식:

 

 

나는 이 문제를 스택으로 접근했다.

 

문제에서 요구하는 바는 다음과 같다.

 

1부터 N까지의 숫자 중에서 단 하나만 빼놓고 쭉 이어서 작성했다고 했을 때, 빼놓고 작성한 숫자를 찾는 것.

 

나는 빼놓고 작성한 문자열을 거꾸로 뒤집고, 리스트로 만들었다. (그렇게 한 이유는 pop연산을 하기 위함이다.)

 

for문으로 1부터 N까지 돌면서 i의 길이만큼 리스트에서 문자를 뽑았다.

 

그리고 뽑은 문자들을 join으로 합쳐주었는데, 만약 빠진 숫자가 아니라면 합쳐준 문자와 i가 서로 일치할 것이다.

 

그게 아니라면 일치하지 않을 건데, 이를 이용하여 구현하였다.


아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.

더보기
# 21144번 Missing Number
# 문자열, 스택

N = int(input())
S = list(reversed(input()))
for i in range(1, N):
    k = []
    for _ in range(len(str(i))):
        num = S.pop()
        k.append(num)
    if int(''.join(k)) != i:
        print(i)
        break
else:
    print(N)