-
프로그래머스 : 프린터코딩테스트 문제 풀이/프로그래머스 2023. 11. 20. 00:01
문제 설명
내 코드
import java.util.*; class Solution { public int solution(int[] priorities, int location) { int answer = 0; Queue<int[]> q = new LinkedList(); for (int i = 0; i < priorities.length; i++) { q.offer(new int[]{priorities[i], (location == i) ? 1 : 0}); } Arrays.sort(priorities); int maxIdx = priorities.length - 1; while (!q.isEmpty()) { int[] get = q.poll(); if (get[0] != priorities[maxIdx]) q.offer(get); else { answer++; maxIdx--; if (get[1] == 1) break; } } return answer; } }
1. 우선순위 목록을 큐에 담는다.
Queue<int[]> q = new LinkedList(); for (int i = 0; i < priorities.length; i++) { if (i == location) q.add(new int[]{priorities[i], 1}); else q.add(new int[]{priorities[i], 0}); }
형태 : `int[]{ 우선순위, 목표물이면 1 목표물 아니면 0}`
2. 우선순위 목록 배열 정렬
Arrays.sort(priorities); int order = priorities.length - 1;
우선순위가 높은 순서부터 뽑아야 하기 때문에 정렬.
내림차순 대신 거꾸로 인덱스방향을 진행하기 위해 order 변수 생성
-> Arrays.sort()로 내림차순 하려면 배열 새로 만들어야 됨 (int[] -> Integer())3. 목표물 찾아서 출력
while (!q.isEmpty()) { // 목표물이 제일 마지막에 출력될수 있기떄문에 큐가 전부 빈 공간이 될때까지 반복 // 사실 큰 의미가 없는 부분인것 같다. // 왜냐하면 목표물이 제일 마지막에 출력되어도 break문으로 인해 먼저 while이 종료되기 때문이다. // 하지만 오류라던가 어떤 불가피한 상황으로 인해서 // priority와 location이 매치가 잘못 될 경우도 있지 않을까 하고 생각해보면 // 큐가 빈 공간이 될때까지 반복하는게 맞는것같다! // 목표물인지 확인하기위해 큐에서 뽑아냄 // 목표물이면 반복문 종료 // 목표물이 아닌데 우선순위가 높으면 뽑아서 버림 // 목표물이 아닌데 우선순위가 낮으면 맨 뒤로 다시 입력 int[] priority = q.poll(); if (priority[0] == priorities[order]) { answer++; // 1개 출력이 되었으므로 answer 1 증가 order--; // 우선순위가 제일 높은게 출력되었으므로 다음 우선순위를 조회하기위해 1 감소 if (priority[1] == 1) break; // 목표물이면 반복문 멈춤 } else { q.add(priority); // 우선순위가 낮은애라서 맨 뒤로 다시 입력 } }
처음 풀어본 날 : 23.03.18
다시 풀어본새로 작성한 날 : 23.03.25 다시 풀어본 날 : 23.03.26, 30
'코딩테스트 문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 : 성격 유형 검사하기 (0) 2023.11.21 프로그래머스 : K번째 수 (0) 2023.11.21 프로그래머스 : 위장 (0) 2023.11.20 프로그래머스 : 나누어 떨어지는 숫자 배열 (0) 2023.11.20 프로그래머스 : 기능개발 (0) 2023.11.20