조앤의 기술블로그
[프로그래머스 / 스택&큐] 프린터 (java) 본문
[1차 코드 - 실패]
import java.util.*;
class Solution {
static class Node {
int index;
int value;
public Node(int index, int value){
this.index = index;
this.value = value;
}
}
public int solution(int[] priorities, int location) {
int answer = 0;
Queue<Node> pq = new LinkedList<Node>();
int[] printing = new int[priorities.length];
for(int i = 0; i < priorities.length; i++){
pq.add(new Node(i, priorities[i]));
}
int k = 0;
while(!pq.isEmpty()){
Node now = pq.poll();
for(Node n : pq){
if(now.value < n.value){
pq.add(now);
break;
}
else{
printing[k++] = now.index;
break;
}
}
}
for(int i = 0; i < priorities.length; i++){
if(location == printing[i])
answer = i;
}
return answer;
}
}
기본 테스트 케이스는 두개 다 통과하였으나, 채점 테스트 케이스는 1개만 통과함..ㅎ
뭐가 문제일까 -> 비교하는 포문이 계속 돌아야 하는데 break때문에 뒤에 값이랑밖에 비교 못함 바부~~!
[2차코드 - 성공]
flag 쓰기 싫었는데... 다른 방법이 생각나지 않아서 썼다..
import java.util.*;
class Solution {
static class Node {
int index;
int value;
public Node(int index, int value){
this.index = index;
this.value = value;
}
}
public int solution(int[] priorities, int location) {
int answer = 0;
Queue<Node> pq = new LinkedList<Node>();
int[] printing = new int[priorities.length];
for(int i = 0; i < priorities.length; i++){
pq.add(new Node(i, priorities[i]));
}
int flag = 1;
int k = 0;
while(!pq.isEmpty()){
flag = 1;
Node now = pq.poll();
for(Node n : pq){
if(now.value < n.value){
pq.add(now);
flag = 0;
break;
}
}
if(flag == 0)
continue;
else
printing[k++] = now.index;
}
for(int i = 0; i < priorities.length; i++){
if(location == printing[i])
answer = i + 1;
}
return answer;
}
}
flag 쓰지 않고 코드를 작성하는 방법을 생각해보자!!!
다른 사람들의 코드를 보는중.. 대단한 사람들이 많다 ...
'Programming > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 해시] 위장 (java) (0) | 2020.03.27 |
---|---|
[프로그래머스 / 해시] 완주하지 못한 선수 (java) (0) | 2020.03.27 |
[프로그래머스] 스킬트리 (java) (0) | 2020.03.23 |
[프로그래머스 / 카카오] 문자열 압축 (java) (0) | 2020.03.23 |
[프로그래머스] 카카오 프렌즈 컬러링북 (java) (0) | 2020.03.23 |