2021. 9. 2. 00:39ㆍProgramming/Python
문제
등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만, 캠핑장에는 다음과 같은 경고문이 쓰여 있었다.
캠핑장은 연속하는 20일 중 10일동안만 사용할 수 있습니다.
강산이는 이제 막 28일 휴가를 시작했다. 이번 휴가 기간 동안 강산이는 캠핑장을 며칠동안 사용할 수 있을까?
강산이는 조금 더 일반화해서 문제를 풀려고 한다.
캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있다. 강산이는 이제 막 V일짜리 휴가를 시작했다. 강산이가 캠핑장을 최대 며칠동안 사용할 수 있을까? (1 < L < P < V)
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.
출력
각 테스트 케이스에 대해서, 강산이가 캠핑장을 최대 며칠동안 사용할 수 있는지 예제 출력처럼 출력한다.
아이디어
1. 크게 아이디어라고 할 만한 건 없고 각 수의 관계를 살펴보니 쉽게 이해가 됐다.
ex) 연속하는 20일 중 10일만 이용가능 총 휴가일 수 28일(총 휴가일 수 28일 // 연속하는 일수 20일) * 이용가능 일수 10일 + (총 휴가일 수 28일 % 연속하는 일수 20일)
처음에 이렇게 생각해서 이대로 알고리즘을 구성했지만 틀렸다고 나왔다. 다시 확인해보니 특정 경우를 간과했었다.
예를 들어 연속하는 20일 중 5일만 이용가능 하고 총 휴가일 수가 28일이면 답이 달라진다. 그러나 내가 짜놓은 알고리즘대로면 이 경우도 앞의 예와 똑같은 답을 출력하게 된다. 따라서, 이 특정 경우만 if문을 활용해서 알고리즘에 추가해주면 된다.
코드
새롭게 알게 된 것
1. 처음에 입력값을 받을 때, [0, 0, 0]을 입력받을 때까지 계속해서 입력을 시켜야 하는데 이 부분을 잘몰라서 애를 먹었다. 결국 떠올린게 while문과 if문을 활용하는 거였는데, 다행히 올바르게 작동했다. 다른 분들 코드를 참고해보니 이렇게 간단하게 몇 줄로 표현하는 방법도 있다.
while True:
test = list(map(int, sys.stdin.readline().split()))
if test == [0, 0, 0]
break
2. 나의 경우, 문자열 포메팅을 잘몰라서 내 코드를 보면 출력값 표현을 하는데 무려 4줄이나 소모한 걸 확인할 수 있다.
그런데 f-string을 활용하면 아래와 같이 한 줄로 표현가능하다.
print(f'Case {count}: {answer_list[i]}')
즉 특정한 변수 값을 지정해줘야 하는 부분만 {}로 감싸주고 나머지는 문자열로 채워주면 된다. 간단하다.
만약 중괄호도 출력하고 싶고 변수도 출력하고 싶을 때는 중괄호를 세 개를 써주면 된다.
{{{변수}}}
'Programming > Python' 카테고리의 다른 글
[Python] 백준 1260번(DFS와 BFS) - BFS 알고리즘 (0) | 2021.09.03 |
---|---|
[Python] 백준 2217번(로프) - 리스트, sys 모듈 (0) | 2021.09.01 |
[Python] 기초 - 숫자값을 입력받아 형태를 변환시켜 출력하기 (0) | 2021.08.23 |