본문 바로가기
코딩테스트 파이썬/백준

기타줄

by 세용용용용 2025. 1. 6.

https://www.acmicpc.net/problem/1049

 

나의 풀이

import sys

def _gitar(N, M):
    s_min_pr, n_min_pr = float('inf'), float('inf')
    for _ in range(M):
        s_pr, n_pr = map(int, sys.stdin.readline().rstrip().split())
        s_min_pr, n_min_pr = min(s_min_pr, s_pr), min(n_min_pr, n_pr)

    N_mod, N_namozi = (N // 6), (N % 6)
    if (N_mod == 0):
        if (s_min_pr <= (n_min_pr * N)):
            return s_min_pr
        else:
            return (n_min_pr * N)
    else:
        if (s_min_pr < (n_min_pr * 6)):
            now_pr = s_min_pr * N_mod # 일단 세트권 구매
            if (s_min_pr <= (n_min_pr * N_namozi)): # 남아있는 것 보다 세트가 더싸면 걍 세트 구매
                return now_pr + s_min_pr
            else:
                return now_pr + (n_min_pr * N_namozi)
        else:
            return (n_min_pr * N)

N, M = map(int, sys.stdin.readline().rstrip().split())
print(_gitar(N, M))

 

시간 복잡도

for _ in range(M) : 기타줄 브랜드를 순회하며 최소 가격을 최신화 ( 선형 시간 복잡도 )
이후 계산 로직은 상수 시간
해당 알고리즘 시간 복잡도 : 선형 시간 복잡도 ( O(n) )

'코딩테스트 파이썬 > 백준' 카테고리의 다른 글

가장 긴 증가하는 부분 수열 ( 11053번 )  (0) 2025.01.10
이중 우선순위 큐  (0) 2025.01.07
DSLR  (0) 2025.01.04
팀 이름 정하기  (1) 2024.12.30
부분수열의 합  (0) 2024.12.27