전체 방문자
오늘
어제
이대코
ServerNeverDown
이대코
  • 분류 전체보기 (110)
    • Project (9)
      • GASIP_대학 커뮤니티 (5)
      • CATCHROOM_야놀자중고숙박거래 (2)
      • CANCER-FINE_암환자를 위한 정보 제공 사.. (2)
    • Development (46)
      • Python (9)
      • Java (8)
      • Kotlin (1)
      • Spring&Springboot (4)
      • BootCamp (10)
      • DevOps (1)
      • TrobleShooting (6)
      • Network (1)
      • DataBase (2)
      • OS (1)
      • Design Pattern (2)
    • Coding Test (52)
      • BOJ (1)
      • DFS,BFS (4)
      • 그리디 알고리즘 (6)
      • Dynamic Programming (2)
      • 이진 탐색 (0)
      • 초보자를 위한 파이썬 300제 (29)
      • 구현 (10)
    • Stock (3)
      • Market View (2)
      • Analysis of stocks (0)
      • Knowledge (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

인기 글

hELLO · Designed By 정상우.
이대코

ServerNeverDown

[그리디 알고리즘] 1049번 기타줄 풀이(파이썬)
Coding Test/그리디 알고리즘

[그리디 알고리즘] 1049번 기타줄 풀이(파이썬)

2023. 1. 26. 20:39

안녕하세요. Harry입니다.

 

본 포스팅의 목적은, 코딩테스트를 준비함에 있어 백준에 제시된 문제 풀이와 스스로 얻은 정보를 정리하고자 합니다.

그러므로 단순히 문제를 푸는 것이 중요한 것이 아니라, 문제를 통해 얻어가는 것이 있어야하기 때문에 접근 방식은 이전 기초 300제를 풀었을 때랑 동일합니다.

 

[접근 방식]

- 문제에서 요구하는 역량은 무엇인지?

- 알고 있어야하는 지식은 무엇인지? 에 기반하여 풀이하고자 합니다.

 

- 백준 문제 링크입니다. : https://www.acmicpc.net/problem/1049

 

1049번: 기타줄

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

www.acmicpc.net

아래 작성된 답안은 제가 직접 작성 후 백준 페이지에서 채점하여 정답으로 인정된 답안입니다.
공식 답안이 아니므로 최적의 해가 아닐 수 있으며, 답안은 다른 분들과 상이할 수 있습니다.

[풀이]

n,m = list(map(int,input().split()))
a=[]
for i in range(m):
    a.append(list(map(int,input().split())))
package = []
solo = []
for i in a:
    package.append(i[0])
    solo.append(i[1])
final = [
    ((n//6)+1)*min(package),(n//6)*min(package)+(n%6)*min(solo),n*min(solo)
]
print(min(final))

분류를 3가지로 먼저 나누었습니다.

1. 패키지가 줄 1개 사는 것보다 싼 경우(패키지 가격 < 줄 1개 가격)

- (n//6+1) 개만큼 전부 가장 싼 package로 구매.

- 현실성은 없지만(이런걸 따질 문제가 아니므로) 줄 1개 가격은 무쓸모.

2. 패키지로 살 때 할인해주는 경우(줄 1개 가격 < 패키지 가격 < 줄 6개 가격)

- 몫(n//6) 개수만큼 가장 싼 package로 구매 + 나머지 (n%6) 개수만큼 줄 1개 가격으로 구매.

3. 전부 줄 1개 가격으로 구매(줄 6개 가격 < 패키지 가격)

- 이런 경우 패키지가 무쓸모.

 

1~3번을 각각 final이라는 리스트에 넣고, 그 중 최소 값을 출력하는 것으로 마무리했습니다.

 

중요한 것은, 최소한의 가지수로 발생할 수 있는 상황을 묶을 수 있는 능력인 것 같습니다.

 

감사합니다.

저작자표시 비영리 변경금지 (새창열림)

'Coding Test > 그리디 알고리즘' 카테고리의 다른 글

[그리디 알고리즘] 2839번 설탕배달 풀이(파이썬)  (0) 2023.03.29
[그리디 알고리즘] 2847번 게임을 만든 동준이 풀이(파이썬)  (0) 2023.01.26
[그리디 알고리즘] 1758번 알바생 강호 풀이(파이썬)  (0) 2023.01.26
[그리디 알고리즘] 11047번 동전0 풀이(파이썬)  (0) 2023.01.26
[Algorithm] 탐욕(Greedy) 알고리즘이란  (0) 2022.12.29
    'Coding Test/그리디 알고리즘' 카테고리의 다른 글
    • [그리디 알고리즘] 2839번 설탕배달 풀이(파이썬)
    • [그리디 알고리즘] 2847번 게임을 만든 동준이 풀이(파이썬)
    • [그리디 알고리즘] 1758번 알바생 강호 풀이(파이썬)
    • [그리디 알고리즘] 11047번 동전0 풀이(파이썬)
    이대코
    이대코
    20대에 대장암 걸린 코틀린/자바 백엔드 개발자의 블로그입니다.

    티스토리툴바