https://www.welcomekakao.com/learn/courses/30/lessons/42891
k번 순회하도록 해서 정확도밖에 맞추지 못한 코드이다.
순회 방법을 줄일 아이디어가 필요하다.
처음에 든 생각은, 배열에서 0이 아닌것의 개수와, 배열의 최솟값을 곱하면 이만큼을 한 번에 먹는 것으로 처리할 수 있다는 것.
다른 생각은 정렬해서 k보다 작을동안 묶어서 빼준 이후에, 한 번에 먹을 수 있는 게 k보다 커지면 다시 순회하는 방법이 있을 것 같다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <string> #include <vector> #include<iostream> typedef long long ll; using namespace std; int len; int solution(vector<int> ft, long long k) { bool done = false; int answer = 0; len = ft.size(); ll j = 0; //findNext(&ft, j); int cnt = 0, Min = 1000000000; for (int i = 0; i < ft.size(); i++) { if (ft[i] != 0) cnt++; if (ft[i] < Min) Min = ft[i]; } for (ll i = 1; i <= k; i++) { if (ft[j] != 0) { ft[j] -= 1; } for (int k = 0; k < len; k++) { j++; if (j == len) j = 0; if (ft[j] == 0) { if(k == len - 1) done = true; //모든 원소가 0 continue; } else break; } //for (int k = 0; k < ft.size(); k++) { // cout << ft[k] << ' '; //} //cout << '\n'; } //cout << "답 : " << j + 1 << '\n'; //if (done) cout << -1; //else // cout << j + 1; if (done) return -1; else return j + 1; } int main(void) { vector<int> food{ 1,2,2,5 }; int k = 13; solution(food, k); return 0; } | cs |
'알고리즘 문제 풀이 > 오답' 카테고리의 다른 글
백준 1525번: 퍼즐 (C++) (0) | 2019.08.30 |
---|---|
연산자 우선 순위가 없는 경우 +, -, * 연산 구현 (0) | 2019.08.21 |
[오답] 백준 1941 소문난 칠공주 C++ (0) | 2019.08.10 |
[오답] 백준 1799번: 비숍 (C++) (0) | 2019.07.24 |
백준 1759번: 암호 만들기 (C++) (0) | 2019.07.23 |