문제


풀이과정
public class Solution12 { //프린터 문제
class Printer{ //프린터의 index위치와 중요도를 담은 class Printer생성
int lo;
int priority;
public Printer(int lo, int priority){
this.lo = lo;
this.priority = priority;
}
}
public int solution(int[] priorities, int location) {
int answer = 0;
Queue<Printer> q = new LinkedList<>(); //프린터의 정보를 담을 큐 생성
for(int i = 0; i < priorities.length; i++){ //큐에 프린터의 정보들을 추가
q.add(new Printer(i,priorities[i]));
}
while(!q.isEmpty()){ //큐에 값이 남아있을경우
Printer p = q.poll(); //p에 큐에서 제일 앞의 값을 빼내서 저장
for(Printer x : q){
if(x.priority > p.priority){ //p의 중요도보다 남아있는 큐의 중요도가 더 클 경우,
q.add(p); //p를 다시 큐에 추가하고
p = null; //p를 null로 만든 뒤,
break; //반복문 탈출
}
}
if(p != null) { //만약 p가 null이 아닐 경우(p의 중요도가 제일 클 경우)
answer++; //인쇄횟수 1증가
if (p.lo == location) { //만약 p의 위치가 우리가 찾는 위치일 경우
return answer; //그때의 인쇄 횟수를 return
}
}
}
return answer;
}
}
우선 이 문제는 솔직히 어떻게든 풀려면 풀 수는 있는 문제이지만 최대한 덜 복잡한 코드로 푸는 것이 관건인 문제인 것 같다.
그래서 원래는 프린터의 priority나 location을 따로 생각해서 풀려고 했으나 그냥 Printer클래스를 생성해서 하나로 묶어서 풀었다.
프린터의 기존의 위치를 lo라는 변수에 넣고 프린터의 중요도를 priority라는 변수에 넣어서 묶어버렸고,
그리고 Printer클래스를 제네릭타입으로 가지는 큐를 생성했고, 그런 큐에 프린터의 정보를 순서대로 넣었다.
그리고 프린터의 중요도를 비교해서 문제에서 요구하는 방식으로 프린트를 하는 알고리즘을 while문에 만들었다.
자세한 풀이는 주석에 적어놓았다.
'프로그래머스 > Level 2' 카테고리의 다른 글
| [프로그래머스][Level2][Java] 더 맵게 (0) | 2022.03.23 |
|---|---|
| [프로그래머스][Level2][Java] 주식가격 (0) | 2022.03.21 |
| [프로그래머스][Level2][Java] 124 나라의 숫자 (0) | 2022.03.12 |
| [프로그래머스][Level2][Java] 다음 큰 숫자 (0) | 2022.03.11 |
| [프로그래머스][Level2][Java] 땅따먹기 (0) | 2022.03.10 |