ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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를 이용하면 모든 경우를 비교해 볼 수 있을 것이라 판단됨
Designed by Tistory.