[C++] : 큐로 구현
#include <vector>
#include <queue>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
queue<int> days; //걸리는 시간 저장
vector<int> answer;
int max_day;
int cnt = 1; //answer에 넣을 값
bool flag = false; //answer에 넣었는지 확인하기 위한 flag
if (progresses.size() > 0 && progresses.size() <= 100 && speeds.size() > 0
&& speeds.size() <= 100){
for (int i = 0; i < progresses.size(); i++){ //걸리는 시간 저장
int day = (100 - progresses[i]) / speeds[i];
if ((100 - progresses[i]) % speeds[i] != 0){
day += 1;
}
days.push(day);
}
max_day = days.front(); //제일 앞에 있는 거를 최댓값이라고 생각
days.pop();
if (days.size() == 1){
answer.push_back(cnt);
}
else if (days.size() > 1 && days.size() <= 100){
while (!days.empty()){
if (max_day >= days.front()){ //기준값보다 작으면 pop, cnt++
days.pop();
cnt++;
flag = false;
}
else{ //기준값보다 크면: 기준값바꾸고 cnt값 answer에 추가, cnt 초기화
max_day = days.front();
days.pop();
answer.push_back(cnt);
flag = true;
cnt = 1;
if (days.empty()) flag = false;
//answer.push_back(cnt); //큰 값이 마지막 숫자라면 answer에 1추가
}
}
if (!flag) answer.push_back(cnt); //falg=false 이면 answer에 cnt 추가
}
return answer;
}
}
[JAVA] : 스택으로 구현
import java.util.Stack;
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
for(int i=0; i<progresses.length; i++){
progresses[i] = (int) Math.ceil((double)(100-progresses[i])/speeds[i]);
}
Stack<Integer> stack = new Stack<>();
stack.push(progresses[0]);
int cnt = 0;
List<Integer> temp = new ArrayList<>();
while(!stack.isEmpty()){
for(int i=1; i< progresses.length; i++){
int top = stack.peek();
if(top >= progresses[i])
cnt++;
else{
stack.pop();
stack.add(progresses[i]);
cnt++;
temp.add(cnt);
cnt = 0;
}
if(i==progresses.length-1 && !stack.isEmpty()){
while(!stack.isEmpty()){
stack.pop();
cnt++;
}
temp.add(cnt);
}
}
}
int[] answer = new int[temp.size()];
for(int i=0; i<temp.size(); i++){
answer[i] = temp.get(i);
}
return answer;
}
}
Math.ceil() : 올림
Math.round() : 반올림
이 문제를 통해 내가 반올림과 올림을 혼동해서 사용하고 있음을 알게됐다.
Math.round()를 사용해서 계속 테스트 실패 도돌이표에 빠졌다가 겨우 빠져나왔다..!
'1d-1c > Programmers' 카테고리의 다른 글
Level1_실패율 (C++) (JAVA) (0) | 2020.12.09 |
---|---|
Level2_카카오프렌즈 컬러링북 (JAVA) (0) | 2020.11.05 |
Level1_체육복 (JAVA) (0) | 2020.11.02 |
Level1_모의고사 (JAVA) (0) | 2020.11.02 |
Level1_예산 (JAVA) (0) | 2020.11.02 |