백준, 고무오리 디버깅
TL;DR
- 스택(Stack)
- 구현(Implementation)
문제 요약
1. 문제를 받은 상태에서 고무오리를 받으면 문제를 해결한다.
2. 문제가 없는 상태에서 고무오리를 받으면 두 문제를 추가한다.
3. 주어진 입력에 대해서 문제를 모두 해결하였으면 '고무오리야 사랑해'를 아니라면 '힝구'를 출력한다.
- 문제와 고무오리가 입력으로 주어질 때 문제가 스택에 있고 고무오리를 입력으로 받는다면 스택을 비우는 방식으로 문제를 해결할 수 있을 것이다.
- 스택이 비어있을 때 고무오리가 입력으로 들어온다면 두 문제를 스택에 추가해야 한다.
입출력 형태
문제를 모두 해결한 경우와 그렇지 않은 경우의 예시를 가져왔다.
- 예제 입력 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 |