본문 바로가기

개발/Algorithm

[백준] 고무오리 디버깅(python)

백준, 고무오리 디버깅

TL;DR

  • 스택(Stack)
  • 구현(Implementation)

문제 요약

1. 문제를 받은 상태에서 고무오리를 받으면 문제를 해결한다.
2. 문제가 없는 상태에서 고무오리를 받으면 두 문제를 추가한다.
3. 주어진 입력에 대해서 문제를 모두 해결하였으면 '고무오리야 사랑해'를 아니라면 '힝구'를 출력한다.

 

- 문제와 고무오리가 입력으로 주어질 때 문제가 스택에 있고 고무오리를 입력으로 받는다면 스택을 비우는 방식으로 문제를 해결할 수 있을 것이다.

- 스택이 비어있을 때 고무오리가 입력으로 들어온다면 두 문제를 스택에 추가해야 한다.

입출력 형태

성공 예시

 

성공 예시 2

 

실패 예시

 

문제를 모두 해결한 경우와 그렇지 않은 경우의 예시를 가져왔다.

- 예제 입력 1에서는 (문제 - 고무오리), (문제, 문제 - 고무오리, 고무오리) 이렇게 모든 문제를 해결할 수 있기 때문에 '고무오리야 사랑해'를 출력하였다.

- 예제 입력 2에서는 아무 문제도 없는 상태에서 고무오리를 사용하여 문제가 2개 추가되었으나 이후 2번의 고무오리 사용을 통해 모든 문제를 해결한 상태가 된다. 따라서 '고무오리야 사랑해'를 출력하였다.

- 예제 입력 4에서는 고무오리만 입력받아 벌칙으로 문제 2문제가 추가되어 문제를 해결하지 못했기 때문에 '힝구'를 출력하였다.

풀이

이 문제는 스택을 사용하는 방법 외에도 다른 방법으로 푸는 방법이 있다. 우선, 스택을 활용한 풀이부터 확인해보자.

import sys

stack = []

while True:
    _input = sys.stdin.readline().split('\n')[0]

    if _input == '문제':
        stack.append(_input)

    if _input == '고무오리':
        if not stack:
            stack.append('문제')
            stack.append('문제')
        else:
            stack.pop()

    if _input == '고무오리 디버깅 끝':
        break

print('고무오리야 사랑해' if not stack else '힝구')

 

- 주어진 입력이 '문제'일 때는 스택에 입력을 집어넣는다.

- 주어진 입력이 '고무오리'일 때는 경우를 따져봐야 한다.

  - 스택이 비어있는 경우는 벌로 두 문제를 추가해야 한다.

  - 그렇지 않은 경우는 문제가 있는 경우이므로 문제를 해결하여 스택에 있는 요소를 pop한다.

- 만약 모든 문제를 해결하였다면 스택이 비어있을 것이고 그렇지 않다면 스택에 원소가 남아있을 것이다. 각 경우에 따라서 맞는 답을 출력해주면 된다.

다른 풀이

스택을 사용하지 않은 방법은 '문제'와 '고무오리'를 점수로 생각하면 된다.

문제는 -1점, 문제가 없는 경우에 고무오리를 사용하면 -2점, 문제가 있을 경우 고무오리를 사용하면 +1점으로 두고 문제를 풀 수 있다.

import sys

score = 0

while True:
    _input = sys.stdin.readline().split('\n')[0]

    if _input == '문제':
        score -= 1

    if _input == '고무오리':
        score = score - 2 if score == 0 else score + 1

    if _input == '고무오리 디버깅 끝':
        break

print('고무오리야 사랑해' if score == 0 else '힝구')

 

스택을 사용하여 문제를 풀었을 때처럼 각 경우에 대응하는 점수를 입력해주면 된다. 이 때는 점수가 0일 때 모든 문제를 해결한 것이므로 '고무오리야 사랑해'를 출력하고 그렇지 않을 경우에는 문제를 해결하지 못한 것이므로 '힝구'를 출력한다.

반응형

'개발 > Algorithm' 카테고리의 다른 글

[백준] 막대기(python)  (0) 2021.07.26
[리트코드] Reconstruct Itinerary(python)  (0) 2021.07.25
[백준] 수들의 합2(python)  (0) 2021.07.22
[프로그래머스] 행렬의 곱셈(python)  (0) 2021.07.21
[리트코드] Subsets(python)  (0) 2021.07.20