https://programmers.co.kr/learn/courses/30/lessons/42587
일단 출력물을 Ball이라는 객체로 생각하고 큐에다 다 넣어놓고 차례대로 조건 확인해주면 되겠다.
Ball에는 location과 priority 넣어주고 큐에 들어있는 볼을 빼면서 나와야하는 priority가 나오면 location확인하고 값 확인.
//테스트코드
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class Quiz2_PrinterTest {
Quiz2_Printer q;
@BeforeEach
void setUp() {
q = new Quiz2_Printer();
}
@Test
void test1() {
assertEquals(1, q.solution(new int[]{2, 1, 3, 2}, 2));
}
@Test
void test2() {
assertEquals(5, q.solution(new int[]{1, 1, 9, 1, 1, 1}, 0));
}
}
//프로덕션코드
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
public class Quiz2_Printer {
public int solution(int[] priorities, int location) {
Queue<Ball> queue = new LinkedList<>();
for (int i = 0; i < priorities.length; i++) {
queue.offer(new Ball(i, priorities[i]));
}
Arrays.sort(priorities);
int step = 1;
while (!queue.isEmpty()) {
if (queue.peek().priority == priorities[priorities.length - step]) {
Ball ball = queue.poll();
if(ball.location == location){
return step;
}
step++;
continue;
}
queue.add(queue.poll());
}
return -1;
}
class Ball {
int location;
int priority;
Ball(int location, int priority) {
this.location = location;
this.priority = priority;
}
}
}
// 성공! 리팩토링하자.
// 프로덕션코드
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
public class Quiz2_Printer {
public int solution(int[] priorities, int location) {
Queue<Ball> queue = new LinkedList<>();
setQueue(priorities, queue);
Arrays.sort(priorities);
int step = 1;
while (!queue.isEmpty()) {
if (isTopPriority(queue.peek().priority, priorities[priorities.length - step])) {
Ball ball = queue.poll();
if (isWhatIWantToPrint(location, ball)) {
return step;
}
step++;
continue;
}
queue.add(queue.poll());
}
return -1;
}
private boolean isWhatIWantToPrint(int location, Ball ball) {
return ball.location == location;
}
private boolean isTopPriority(int priority, int priority2) {
return priority == priority2;
}
private void setQueue(int[] priorities, Queue<Ball> queue) {
for (int i = 0; i < priorities.length; i++) {
queue.offer(new Ball(i, priorities[i]));
}
}
class Ball {
int location;
int priority;
Ball(int location, int priority) {
this.location = location;
this.priority = priority;
}
}
}
// 성공!
'코딩테스트연습 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 - JAVA] 기능개발 (0) | 2021.12.18 |
---|---|
[프로그래머스 - JAVA] 카카오프렌즈 컬러링북 (0) | 2021.12.17 |
[프로그래머스 - JAVA] 문자열 내 마음대로 정렬하기 (0) | 2021.12.16 |
[프로그래머스 - JAVA] 크레인 인형뽑기 게임 (0) | 2021.12.14 |
[프로그래머스 - JAVA] 같은 숫자는 싫어 (1) | 2021.12.13 |