선릉역 1번 출구
baekjoon - 1874 본문
num = int(input()) stack = [] ls = [] k = 1 flag = 0 for _ in range(num): a = int(input()) while k <= a: stack.append(k) ls.append('+') k+= 1 if stack[-1] == a: stack.pop() ls.append('-') else: flag = 1 if flag == 0: for i in ls: print(i) else: print("NO") |
이 문제는 처음 입력받은 수열(n)을 만들기 위해 1~n까지의 수열을 push(+), pop(-)을 이용해서 만들 수 있냐?를 판정하는 문제이다.
만들 수 있으면 push와 pop을 사용한 결과를 출력하는 것이고, 아니면 NO을 출력해야 하기 때문에 flag 변수를 선언해 주었다.
입력받을 수열을 1~n까지의 수열을 오름차순으로 사용해서 만들 수 있는지 판정을 해야하는데 여기서 핵심은 먼저 오름차순으로 push하는 수이다. 4가 처음 입력받은 수라면 1~4까지 push를 하고 pop을 하는 건데, 입력받은 숫자가 push한 수보다 작으면 무조건 top에 위치해야한다. 위치하지 않으면 그 수보다 더 작은 수가 top에 위치한 것인데, 그럼 더이상 push가 가능하지 않기 때문에 NO을 출력하게 된다.
[1, 2, 5, 3, 4]가 그 예시인데, 5에서 pop을 하고 나면 stack에는 4, 3이 위치한다. 그런데 그 다음 수가 4가 아닌 3이어서 4를 pop하고 3을 pop해서 4가 소실된다. 다시 숫자를 push해줄 수 없기 때문에 이 경우 NO를 출력하게 되는 것이다.
만약 [1, 2, 5, 4, 3]이었다면 제대로 출력을 했을 것 이다.
'Algorithm > Algorithm 문제풀이' 카테고리의 다른 글
baekjoon - 10845 (0) | 2021.08.30 |
---|---|
baekjoon - 1406 (0) | 2021.08.30 |
baekjoon - 9012 (0) | 2021.08.28 |
baekjoon - 9093 (0) | 2021.08.28 |
baekjoon - 10828 (0) | 2021.08.28 |
Comments