백준, 코드 트리(python)

[BOJ] 백준 1362 펫 : python 풀이

yoon-arc 2025. 5. 13. 09:00

 

 

 

이번 포스팅에서는 백준 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"