본문 바로가기

코딩테스트 문제풀이

[백준 11047] 문제 풀기(그리디)

#include <stdio.h>
#include <vector>
#include <iostream>

using namespace std;

void solution(int N, int K, vector<int> list) {
	int len = list.size() - 1;	//배열의 끝에서부터 탐색 (문제는 오름차순으로 이미 정렬된 배열임.)
	int ind = len;				//인덱스 위치 선택자
	int cnt = 0;
	while (K > 0) {
		if (list[ind] <= K) {
			K -= list[ind];		//찾았을 경우, 해당 값 감소
			cnt++;				//횟수 갱신
			ind = len;			//위치 초기화
		}
		else ind--;				//그 외의 경우, 위치 감소(뒤에서부터 앞으로 탐색)
	}
	cout << cnt;
}

int main() {
	int N, K;
	int coin;
	//편의를 위해 벡터 사용
	vector<int> list;
	cin >> N;
	cin >> K;
	for (int i = 0; i < N; i++) {
		cin >> coin;
		list.push_back(coin);
	}
	//입력을 모두 마치고 함수 호출
	solution(N, K, list);
}

 13분 03초

 

코딩을 최대한 빠르게 하였습니다 사실 기록용이기도 하고 본보기가 되기에는 효율성이 매우 낮습니다..

겸사겸사 게시한거라 감안하시고 봐주시기 바라요 그래도 그나마 보기 편하시라고 제출한 후, 따로 주석을 달아놓았습니다!