[BOJ-4796] 캠핑 (Python)

yuseon Lim·2021년 7월 16일
0

Problem Solving

목록 보기
33/37
post-thumbnail

🤒 문제

BOJ-4796 캠핑

💊 풀이1

위 그림에서 크게 두 가지 경우로 나눌 수 있다.

  1. 남은 휴가일수가 연속하는 P일보다 클 경우
  2. 남은 휴가일수가 연속하는 P일보다 작을 경우

1번의 경우에는 남은 휴가일수에서 P일을 빼고, 결과(휴가 기간동안 캠핑장을 사용 할 수 있는 일수)에 사용할수 있는 일수 L을 더해주면 된다.

2번의 경우에는 또 두 가지로 나눌 수 있는데,

  1. 남은 휴가일수가 사용할수 있는 일수 L보다 클 경우
  2. 남은 휴가일수가 사용할수 있는 일수 L보다 작거나 같을 경우

1번의 경우엔 결과에 L을 더해주고 결과를 return 한다.

2번의 경우엔 남은 휴가기간동안 사용가능한 일수 L만큼 캠핑장을 다 쓸 수 없으므로 결과에 V를 더해주고 return 한다.

💊 풀이2

[풀이1] 과 큰 차이는 없지만,

결과 += (V를 P로 나눈 값) * L 으로 풀이 1의 한 단계를 해결한다.

그러고 나서 V를 P로 나눈 나머지값을 저장하고 남은 휴가일수 V를 계산한 뒤, 풀이2의 두번째 과정을 시행한다.

✨ 소스코드 1

import sys

def solution(L: int, P: int, V: int):
    result = 0

    while True:
        if V - P > 0:
            result += L
            V -= P
        else:
            if V > L:
                result += L
            else:
                result += V
            return result

i = 1
while True:
    L, P, V = map(int, sys.stdin.readline().split())
    if V == 0: break
    print(f"Case {i}: {solution(L, P, V)}")
    i += 1

✨ 소스코드 2

import sys

def solution(L: int, P: int, V: int):
    result = 0
    result += (V // P) * L

    carry = V % P
    V -= (V // P) * P
    
    if carry > L:
        return result + L
    else:
        return result + V

i = 1
while True:
    L, P, V = map(int, sys.stdin.readline().split())
    if V == 0: break
    print(f"Case {i}: {solution(L, P, V)}")
    i += 1

profile
🔥https://devyuseon.github.io/ 로 이사중 입니다!!!!!🔥

0개의 댓글