나는 인디
Life Debugging
나는 인디
전체 방문자
오늘
어제
  • 분류 전체보기 (15)
    • Log.life (2)
      • Occasional (2)
    • Learn (8)
      • SC (0)
      • BOJ (5)
      • 프로그래머스 (3)
    • Java (1)
    • HTML (2)
    • Python (0)
    • Tips (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 풀스택
  • 분해합
  • 전화번호 목록
  • 인프런강의
  • 자바
  • 주민번호
  • vscode
  • 4796
  • 달력
  • 국비지원
  • html
  • 부트캠프
  • python
  • 캠핑
  • 완주하지 못한 선수
  • css
  • 2231
  • 영화감독 숌
  • 로또
  • 구구단
  • 파이썬
  • BOJ
  • 프로그래머스
  • 클래스 반복
  • 1436
  • 백준
  • vscode 화면분할
  • 위장
  • 클론코딩

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
나는 인디
Learn/BOJ

(백준/파이썬) 4796번 캠핑

(백준/파이썬) 4796번 캠핑
Learn/BOJ

(백준/파이썬) 4796번 캠핑

2022. 6. 13. 22:10

문제 링크

 

4796번: 캠핑

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.

www.acmicpc.net

성능 요약

메모리: 32952 KB, 시간: 128 ms

분류

그리디 알고리즘(greedy), 수학(math)

문제 설명

등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만, 캠핑장에는 다음과 같은 경고문이 쓰여 있었다.

캠핑장은 연속하는 20일 중 10일동안만 사용할 수 있습니다.

강산이는 이제 막 28일 휴가를 시작했다. 이번 휴가 기간 동안 강산이는 캠핑장을 며칠동안 사용할 수 있을까?

강산이는 조금 더 일반화해서 문제를 풀려고 한다.

캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있다. 강산이는 이제 막 V일짜리 휴가를 시작했다. 강산이가 캠핑장을 최대 며칠동안 사용할 수 있을까? (1 < L < P < V)

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.

출력

각 테스트 케이스에 대해서, 강산이가 캠핑장을 최대 며칠동안 사용할 수 있는지 예제 출력처럼 출력한다.

 

나의 풀이

첫 접근은 V/P의 몫에 L을 곱한 후 V%P를 더하는 것이었으나, 예외의 경우를 생각하지 못했다.

그래서 L과 V%P 중 낮은값을 출력할 수 있도록 수정했다.

 

Code

import math
Case = 0
while True:
Case += 1
L, P, V = map(int, input().split())
if L == P == V == 0:
break
cul1 = L*(math.floor(V/P))
cul2 = min(V%P, L)
result = cul1+cul2
print("Case %d: %d"%(Case, result))
view raw 캠핑.py hosted with ❤ by GitHub

참고로 당시에는 '//'를 이용하여 나눈 후 몫을 반환하는 방법이 떠오르지 않아

math 모듈을 import하여 V/P의 결과를 내림하는 방법을 써버렸다..

 

 

 

다른 풀이

  • 입력이 여러 개의 테스트 케이스로 이루어져 있기 때문에 while문으로 반복해서 l,p,v를 입력받는다.
  • 만약 l,p,v가 모두 0인경우 break로 while문을 빠져나온다.
  • 휴가의 v일중 (v//p)만큼 l일을 온전히 캠핑장을 이용할 수 있다.
  • 휴가의 v일중 (v%p)와 l중 작은 일수 만큼 캠핑장을 이용할 수 있다.

위의 조건에 맞춰 깔끔하게 작성한 코드

 

Code

 

import sys
input = sys.stdin.readline
i = 1
while True:
l, p, v = map(int, input.split())
if l+p+v == 0:
break
res = (v//p)*l
res += min((v%p), l)
print('Case %d: %d'%(i, res))
i += 1
view raw 캠핑_다른풀이.py hosted with ❤ by GitHub
저작자표시 비영리 변경금지 (새창열림)

'Learn > BOJ' 카테고리의 다른 글

백준/JAVA) 1269 대칭 차집합  (0) 2022.07.16
(백준/파이썬) 9012번 괄호  (0) 2022.06.16
(백준/파이썬) 2231번 분해합  (0) 2022.06.15
(백준/파이썬) 1436번 영화감독 숌  (0) 2022.06.12
  • 성능 요약
  • 분류
  • 문제 설명
  • 입력
  • 출력
  • 나의 풀이
  • Code
  • 다른 풀이
'Learn/BOJ' 카테고리의 다른 글
  • 백준/JAVA) 1269 대칭 차집합
  • (백준/파이썬) 9012번 괄호
  • (백준/파이썬) 2231번 분해합
  • (백준/파이썬) 1436번 영화감독 숌
나는 인디
나는 인디

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.