굥뷰를 햡시댜
[2018 Kakao Blind] 무지의 먹방 라이브 본문
https://programmers.co.kr/learn/courses/30/lessons/42891
일단 결과부터 말하면 정확성 부분만 통과했다.
효율성까지 고려해서 풀어보려고 했지만 아이디어는 생각났는데 구현을 못했다.
결국 정확성 부분만 풀고 다른 사람의 풀이를 확인했더니 내 아이디어랑 일치해서 조금 놀랐다.
그건 그 사람의 풀이고 일단 내가 정확성 부분만 통과한 풀이방법에 대해 설명해보려고 한다.
- 풀이 방법
1. 가장 먼저 입력으로 들어온 음식이 0이 아닐 경우부터 세줬다.
(나중에 0일 경우 답이 -1이기 때문에)
2. 음식을 1씩 빼주면서 0이 될 경우 1번에서 카운트한 변수를 1씩 빼줬다.
3. 루프를 돌고 있는 인덱스가 n-1일 경우 다음 인덱스는 0이 되고 그 외의 경우는 인덱스에 1을 더해줬다.
4. 그리고 k초가 지나면 현재의 인덱스에 1을 더해서 답을 구했다.(food_times는 0번째부터 시작하기 때문에 1을 더해줌)
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> food_times, long long k) {
int answer = 0;
int n = food_times.size();
int zero_cnt = 0;
for (int i = 0; i < n; i++) {
if (food_times[i] != 0) {
zero_cnt += 1;
}
}
bool flag = true;
int i = 0;
while (1) {
if (food_times[i] != 0) {
food_times[i] -= 1;
if (food_times[i] == 0) {
zero_cnt -= 1;
if (zero_cnt == 0) {
flag = false;
answer = -1;
break;
}
}
if (i + 1 == n) i = 0;
else i += 1;
if (k - 1 == 0) {
int j = i;
while (1) {
if (food_times[j] != 0) {
flag = false;
i = j;
break;
}
else {
if (j == n - 1) j = 0;
else j += 1;
}
}
if (!flag) break;
}
else k -= 1;
}
else {
if (i + 1 == n) i = 0;
else i += 1;
}
if (!flag) break;
}
if (zero_cnt == 0) {
answer = -1;
}
else answer = i + 1;
return answer;
}
'알고리즘 문제 풀이 > 2019 Kakao Blind 문제 풀이' 카테고리의 다른 글
[2018 Kakao Blind] 블록게임 (0) | 2019.09.05 |
---|---|
[2018 Kakao Blind] 실패율 (0) | 2019.08.08 |
[2018 Kakao Blind] 오픈채팅방 (0) | 2019.08.07 |
Comments