티스토리 뷰
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
매 순간 당장 최적인 수를 선택하여 최소로 필요한 동전 수를 구하는 점에서 그리디 알고리즘문제이다.
정답코드 (C++)
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int N, K, index, res = 0;
cin >> N >> K;
int arr[10] = {0, };
for (int i = 0; i < N; i++)
{
cin >> arr[i];
}
while (K != 0){
for (int i = N - 1; i >= 0; i--){
if (K >= arr[i]){
res += K / arr[i];
K = K % arr[i];
}
if (K == 0) break;
}
}
cout << res;
}
첫 제출에 시간 초과가 뜨길래 cin과 cout에 소요되는 시간때문이라 생각했다.
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
그래서 C와 C++ 표준 stream 동기화를 끊는 코드를 다음과 같이 추가했으나 여전히 시간초과였고 while문 선언이 문제란 것을 깨달았다.
while (K != 0) {
for (int i = 0; i < N; i++) {
if (K < arr[i + 1]) {
K = K - arr[i];
break;
}
}
res++;
}
cout << res << endl;
4200원에 필요한 동전 갯수를 1개 카운트 할 때 마다 매번 for문이 다시돈다 알고리즘 공부를 몇달만에 다시 시작했기 때문인듯하다. 당연히 시간초과가 걸리는 코드였다.
그러나 덕분에 C++ 입출력속도에 대한 고민을 해볼 수 있었고, endl이 버퍼를 비우는 작업까지 동반해 '\n' 보다 현저히 느리다는 것도 알았다.
https://www.acmicpc.net/blog/view/56
입력 속도 비교
여러가지 언어와 입력 방법을 이용해서 시간이 얼마나 걸리는지 비교해 보았습니다. 방법: 첫째 줄에 정수의 개수 N (= 10,000,000), 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일
www.acmicpc.net
'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글
백준알고리즘 2485 가로수 [C++] (0) | 2021.07.11 |
---|---|
백준 1181 단어정렬 [C++] - list 활용 (0) | 2021.07.10 |
백준알고리즘 21866 추첨을통해커피를받자 [C++] (0) | 2021.07.04 |
백준알고리즘 11650 좌표정렬하기 C++ (0) | 2021.07.03 |
백준알고리즘 2309 일곱난쟁이 풀이 C++ (0) | 2021.07.02 |
- Total
- Today
- Yesterday
- 부트스트랩
- 이클립스
- 인턴
- SQL
- 오류
- 스프링
- 넥사크로
- 네트워크
- C
- 프로그래머스
- 백준
- svn
- 오라클
- Thymeleaf
- Java
- JSP
- HeidiSQL
- 스프링부트
- CSS
- Open API
- JVM
- C++
- CS
- 환경설정
- 개발용어
- 국비교육
- 데이터베이스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |