일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- LF
- REST API
- CRLF
- 개행문자
- 가장큰수
- IP주소
- 퀵정렬
- eslint
- git 개행문자
- vscode
- input 안보임
- expected linebreaks to be 'lf' but found 'crlf' linebreak-style
- 프로그래머스
- CRA
- git autocrlf
- 원시값
- react
- 참조타입
- HTTPS
- input type password
- lazy-load
- prettier
- expected linebreaks to be 'crlf' but found 'lf' linebreak-style
- git 명령어
- 응답코드
- password 안보임
- k번째수
- git
- JadenCase
- eslint-prettier
Archives
- Today
- Total
우파루파의 개발 기록
[백준] 11047: 동전 0 (그리디) 본문
안녕하세요.
이번 문제는 백준의 11047번 입니다.
그리디 알고리즘을 사용해 푸는 문제입니다.
저는 요즘 푸는 문제들은 `알고리즘 디자인 캔버스(이하 캔버스)`를 제게 더욱 잘 맞게 수정해서, 템플릿화 시켜서 사용하고 있습니다.
그래서 해당 문제도 캔버스에 적어가며 풀었습니다. 문제 정리에 도움이 되는 것 같습니다.
참고로 그리디 알고리즘이란 매 상황에서의 가장 좋은 선택지를 고르는 알고리즘입니다.
그래서 특정 조건을 충족하지 않으면 일반적으로 최적의 해가 되기는 어렵습니다. 최적 값의 '근사값'이 목표입니다.
다음이 문제입니다. 실버 4 단계네요.
문제
코드
n, k = map(int, input().split())
n_l = list(map(int, [input() for i in range(n)]))
c = 0
for v in n_l[::-1]:
if v <= k:
c = c + k // v
k = k - (k // v) * v
if k <= 0:
break
print(c)
- 놓치기 쉬운 부분으로, 동전 종류와 값이 완전히 맞아 떨어질 때 (예를 들어 5000원이 목표 금액일 때)를 신경 써야 합니다.
- 저도 사실 한번 틀리고 테스트 케이스를 추가해서 생각해보고 맞췄습니다.
알고리즘 캔버스
감사합니다.
'development > 알고리즘' 카테고리의 다른 글
[프로그래머스] 60057: 2020 KAKAO BLIND RECRUITMENT > 문자열 압축 (0) | 2024.04.05 |
---|---|
[프로그래머스] 120812: 최빈값 (1) | 2024.03.29 |
[프로그래머스] JadenCase 문자열 만들기 (0) | 2022.09.11 |
[프로그래머스] 가장 큰 수 (0) | 2022.08.31 |
[프로그래머스] K번째 수 (0) | 2022.08.30 |