알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 기타줄(1049)

HRuler 2023. 1. 17. 16:13

1. 문제

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

 

1049번: 기타줄

첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주

www.acmicpc.net

2. 풀이

import sys
input = sys.stdin.readline

# n : 필요한 기타줄 개수, m : 브랜드 개수
n, m = map(int, input().split())

# p_m_c : 패키지 최소 가격, s_m_c : 낱개 최소 가격
p_m_c, s_m_c = 1000, 1000
for i in range(m):
    p_c, s_c = map(int, input().split())
    p_m_c, s_m_c = min(p_m_c, p_c), min(s_m_c, s_c)

cnt = n // 6
# min_c : 최소 가격
min_c = 100001
for i in range(cnt+1):
    min_c = min(min_c, (p_m_c * i) + (s_m_c * (n - (i * 6))))
min_c = min(min_c, (p_m_c * (cnt+1)))
print(min_c)

3. 후기

 - 코드의 프로세스는 입력받는 패키지 가격, 낱개 가격의 최소를 구한 후 패키지, 낱개 개수별 가장 적은 가격을 구하는 방식으로 진행하였다. 당연히 맞을줄 알았지만 17프로 전에 틀렸습니다가 떠버렸다.

 패키지 개수가 좀 남더라도 적은 가격이 나올 경우가 있는데 그 부분을 커버하지 못한 것이 그 이유였다.

 알고리즘을 설계할 때 놓치는 부분이 발생하지 않도록 디테일한 부분까지 신경써서 코딩을 해보도록 하자.