-
[SWEA] 1952. 수영장 (python)카테고리 없음 2021. 9. 9. 00:19
문제 바로가기 : [모의 SW 역량 테스트] 수영장
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
- 문제 요약
- 1일, 1개월, 3개월, 1년 이용권에 대한 가격, 월별로 1년 수영장 이용 횟수를 받아서 가장 저렴하게 수영장을 사용했을 때의 가격을 구하는 문제
- 접근 방법
- 1일권과 1개월권을 먼저 비교해서 월별로 더 저렴한 가격을 구해 리스트로 받는다.
- 그 리스트를 3개월 단위로 끊어서 3개월 권과 비교
- 마지막으로 1년권과 비교해서 가장 저렴한 경우를 구한다.
- 내가 푼 코드
T = int(input()) for tc in range(1, T+1): price = list(map(int, input().split())) # 이용권 가격 plan = list(map(int, input().split())) # 월별 이용일수 # 월별로 1달 이용권을 쓰는 것과 1일 이용권을 쓰는 것중 더 이득인 것으로 가격을 책정 for i in range(len(plan)): if plan[i] != 0: if plan[i] <= (price[1]//price[0]): plan[i] = price[0] * plan[i] else: plan[i] = price[1] # 월별 이용 복사 plan1 = plan.copy() # 앞에서 부터 3개월 이용권 사용 했을 때와 비교 for i in range(len(plan)-2): if plan[i] + plan[i+1] + plan[i+2] > price[2]: plan[i] = price[2] plan[i+1] = 0 plan[i+2] = 0 # 뒤에서 부터 3개월 이용권 사용 했을 때와 비교 for i in range(len(plan)-1, 2, -1): if plan1[i] + plan1[i-1] + plan1[i-2] > price[2]: plan1[i] = price[2] plan1[i-1] = 0 plan1[i-2] = 0 # 둘 중 더 작은 값 선택 if sum(plan) > sum(plan1): ans = sum(plan1) else: ans = sum(plan) # 1년 권 과 비교 if ans > price[3]: ans = price[3] print('#{} {}'.format(tc, ans))
평가
- PASS는 했지만 모든 경우의 수를 적용하지 못하는 코드라고 생각된다.
- 다른 풀이를 찾아서 공부해 볼 필요가 있음
- DP를 이용하면 모든 경우를 비교해 볼 수 있을 것이라 판단됨
- 문제 요약