이번 포스팅에서는 백준 1362번 펫 문제를 다뤄보겠습니다. 전체 코드는 글 최하단에 첨부 되어있습니다!


문제 링크 : https://www.acmicpc.net/problem/1362
📌 문제 핵심 논리
solved.ac 기준 브론즈 2 문제기 때문에 제한 조건도 넉넉하고 별도의 알고리즘 없이 단순 구현으로 쉽게 해결할 수 있는 문제입니다.
종료 조건이나, 사망 조건 처리 위치에 신경을 쓰면 큰 어려움 없이 해결 할 수 있습니다 :)
적정 체중(o), 초기 체중(w)이 주어지고 콘솔 F(증가), E(감소)에 따라 숫자 n만큼의 값을 증감시키며 시뮬레이션을 진행합니다.
체중이 0 이하가 되면 사망(RIP)가 되며, 이 다음 입력되는 콘솔은 무시해야합니다.
중간에 사망하지 않고, 최종 체중이 적정 체중의 1/2 초과, 2배 미만인 경우에만 ' :-) '를 출력합니다.
📌 코드 흐름
몇 번째 시나리오인지 저장할 변수 scenario를 만들어줍니다.
입력된 o(적정 체중),w(현재 체중)값이 ' 0 0 '이 아닌 이상 반복 되야하므로 while문을 사용합니다
각 테스트케이스는 독립적인 내부 while문으로 시뮬레이션 처리해줍니다.
콘솔이 ' # 0 ' 인 경우를 break 조건으로 걸어줍니다. 이때, 출력도 같이 처리해주는데,
적정 체중 1/2 < 현재 체중 < 적정 체중 * 2 인 경우에만 ' :-) '를, 외에는 ' :-('가 출력되도록 조건을 걸어줍니다.
그 다음은 콘솔 값 E, F에 따라 현재 체중(w) 값을 증감시켜주고(if문으로 사망하지 않았을 때만 실행)
마지막에 현재 w 값이 사망 조건에 해당하는지 확인해줍니다.
<정리>
- 입력 구조: 초기체중(o), 현재체중(w)을 입력받고 (0,0)이 입력되면 프로그램 종료
- 중첩 루프: 각 테스트케이스는 독립적인 while 루프 내에서 시뮬레이션 처리
- 종료 조건: C == '#' and S == 0 입력 시 종료 → 해당 시점에서 체중 상태 판단
- 체중 감소: 'E' → 운동으로 체중 감소
- 체중 증가: 'F' → 먹이로 체중 증가
- 사망 조건: 체중이 0 이하로 떨어지면 status = 'RIP'
📌 전체 코드
scenario = 0
while True:
o, w = map(int, input().split())
#0,0입력 시 종료
if o == 0 and w == 0:
break
#시나리오 값 증가
scenario += 1
status = ""
while True:
C, S = input().split()
S = int(S)
#사이클 종료
if C == '#' and S == 0:
if status == 'RIP':
print(scenario, status)
else:
print(scenario, ':-)' if o//2< w < o*2 else ':-(')
break
if w > 0:
if C == 'E':
w -= S
if C == 'F':
w += S
if w <= 0 :
status = "RIP"'백준, 코드 트리(python)' 카테고리의 다른 글
| [BOJ] 백준 13305번 : 주유소 python 풀이 (0) | 2025.05.11 |
|---|---|
| [BOJ] 백준 1063번 킹 : python 풀이 (0) | 2025.03.15 |
| [BOJ] 백준 1759번 파이썬 풀이 : combinations 활용하기 (0) | 2025.03.10 |
| [leetcode] 리트코드 Weekly Contest 434. 2번 풀이(3433번 문제) (0) | 2025.01.30 |
| [코드 트리] 거울에 레이저 쏘기2 Python 풀이 (2) | 2024.12.06 |