deo2kim
맞왜틀
deo2kim
전체 방문자
오늘
어제
  • 분류 전체보기
    • CS
      • Algorithm
      • Data Structure
      • Network
      • DB
      • OS
    • Algorithm Problem
      • Python
      • JavaScript
    • Programming language
      • Python
      • JavaScript
    • Tool
      • Jquery
      • React
    • 개발
    • Infra

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
deo2kim

맞왜틀

[python] 백준 - 11047. 동전 0
Algorithm Problem/Python

[python] 백준 - 11047. 동전 0

2020. 7. 2. 17:01
반응형

문제 해결

1. 그리디 알고리즘. S1

2. 큰 동전부터 순차적으로 for문을 돌리며

 (1) 목표값 k 보다 작은 동전이 나왔을 때 그 동전의 값을 뺄 수 있는 만큼 빼준다.

 ex) 45원이 남았을 때 10원짜리 동전이 나왔다면 계산을 통해 10원을 4번 빼주고 카운트를 4 올려준다.

 (2) 빼준 값만큼 k값을 줄여가며 동전을 0원으로 만든다.

 (3) 누적된 cnt 값을 출력해주면 끝

 

🌞 탐색알고리즘을 해결할 땐 시간을 최적화 하는게 중요한 것 같다.

❓처음 해결방법: 동전값을 찾았을 때 while문으로 동전을 하나씩 빼줬는데 시간 초과가 났다.

 

❓두번째 해결방법: k값이 0이 됐음에도 불구하고 나머지 for문을 돈다고 생각하여 break문을 추가했다.

이것도 시간 초과. 사실 별로 도움이 안된거 같다.

 

❗마지막 해결방법: while문에서 많은 시간을 쓴다고 생각해서 하나씩 빼주는 대신 몫을 계산하여 한번 계산으로 값을 빼주고 카운트를 올려줬다. 성공🚩

 

소스 코드

n, k = map(int, input().split())
coins = [int(input()) for _ in range(n)]

cnt = 0
for i in range(n-1, -1, -1):

    # while coins[i] <= k:
    #     k -= coins[i]
    #     cnt += 1
    
    if coins[i] <= k:
        mok = k // coins[i]
        k -= coins[i]*mok
        cnt += mok
    
    # 가지
    if k == 0:
        break

print(cnt)

 

출처: BACKJOON ONLINE JUDGE

문제: https://www.acmicpc.net/problem/11047

 

11047번: 동전 0

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

www.acmicpc.net

 

문제

준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.

동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)

둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

출력

첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.

 

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

'Algorithm Problem > Python' 카테고리의 다른 글

[python] 백준 - 2941. 크로아티아 알파벳  (0) 2020.07.05
[python] 백준 - 11399. ATM  (0) 2020.07.03
[python] 백준 - 1316. 그룹 단어 체커  (0) 2020.06.24
[python] 백준 - 1697. 숨바꼭질  (0) 2020.06.23
[python] 백준 - 2178. 미로 탐색  (4) 2020.06.22
    'Algorithm Problem/Python' 카테고리의 다른 글
    • [python] 백준 - 2941. 크로아티아 알파벳
    • [python] 백준 - 11399. ATM
    • [python] 백준 - 1316. 그룹 단어 체커
    • [python] 백준 - 1697. 숨바꼭질
    deo2kim
    deo2kim
    코딩 기록하기

    티스토리툴바