728x90
반응형
⭐️ 코드 (Queue 이용)
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
ArrayDeque<Integer> queue = new ArrayDeque<>();
ArrayDeque<Integer> speedsQueue = new ArrayDeque<>();
for (int i = 0; i < progresses.length; i++) {
queue.addLast(progresses[i]);
speedsQueue.addLast(speeds[i]);
}
ArrayList<Integer> arrayList = new ArrayList<>();
while (!queue.isEmpty()) {
for (int i = 0; i < queue.size(); i++) {
int a = queue.pollFirst();
int b = speedsQueue.pollFirst();
queue.addLast(a + b);
speedsQueue.addLast(b);
}
// 100이 넘으면
if (queue.peekFirst() >= 100) {
int cnt = 0;
while (true) {
if (queue.isEmpty() || queue.peekFirst() < 100) {
break;
}
if (queue.peekFirst() >= 100) {
queue.pollFirst();
speedsQueue.pollFirst();
cnt++;
}
}
arrayList.add(cnt);
}
}
int[] answer = new int[arrayList.size()];
for (int i = 0; i < arrayList.size(); i++) {
answer[i] = arrayList.get(i);
}
return answer;
}
}
💊 오답 노트
정답 코드지만 처음 풀었을 때 사용했던 코드다. 큐나 스택을 사용하지 않고 풀었던 풀이. 뭔가 조잡하다!!!
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int completed = 0;
ArrayList<Integer> result = new ArrayList<Integer>();
while (!(completed == progresses.length)) {
for(int i = 0; i < progresses.length; i++) {
progresses[i] += speeds[i];
}
int res = completed;
if(progresses[completed] >= 100) {
completed++;
for(int i = completed; i<progresses.length; i++) {
if(progresses[completed] >= 100) {
completed++;
}
}
result.add(completed - res);
}
}
int[] answer = new int[result.size()]; // return 값 저장되는 배열
for(int i = 0; i<answer.length; i++) {
answer[i] = result.get(i);
}
return answer;
}
}
이제 큐를 이용해서 풀어봤는데 시간이 더 많이 걸린다. 뭐가 맞는 코드인지는 모르겠다 ㅎㅎ
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
ArrayDeque<Integer> queue = new ArrayDeque<>();
ArrayDeque<Integer> speedsQueue = new ArrayDeque<>();
for (int i = 0; i < progresses.length; i++) {
queue.addLast(progresses[i]);
speedsQueue.addLast(speeds[i]);
}
ArrayList<Integer> arrayList = new ArrayList<>();
while (!queue.isEmpty()) {
for (int i = 0; i < queue.size(); i++) {
int a = queue.pollFirst();
int b = speedsQueue.pollFirst();
queue.addLast(a + b);
speedsQueue.addLast(b);
}
// 100이 넘으면
if (queue.peekFirst() >= 100) {
int cnt = 0;
while (true) {
if (queue.isEmpty() || queue.peekFirst() < 100) {
break;
}
if (queue.peekFirst() >= 100) {
queue.pollFirst();
speedsQueue.pollFirst();
cnt++;
}
}
arrayList.add(cnt);
}
}
int[] answer = new int[arrayList.size()];
for (int i = 0; i < arrayList.size(); i++) {
answer[i] = arrayList.get(i);
}
return answer;
}
}
👀 후기
이 문제는 시뮬레이션처럼 푸는건지,, 큐를 이용해서 푸는건지... 음...냐..
시간은 큐가 더 느리긴한데.... 누가 설명좀해주세요...!!
728x90
반응형
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스 고득점 Kit] 프로세스 - Stack/Queue - Lv2 (0) | 2023.06.01 |
---|---|
[프로그래머스 고득점 Kit] 베스트앨범 - Hash(해시) - Lv3 (0) | 2023.05.31 |
[프로그래머스 고득점 Kit] 의상 - Hash(해시) - Lv2 (0) | 2023.05.31 |
[프로그래머스 고득점 Kit] 전화번호 목록 - Hash(해시) - Lv2 (0) | 2023.05.31 |
[프로그래머스/Programmers] 구명보트 (Java - Greedy - Lv2) (0) | 2023.02.04 |