Free Lines Arrow
본문 바로가기
Algorithm/프로그래머스 알고리즘

[프로그래머스] 프린터

by skahn1215 2021. 7. 23.
728x90
반응형

문제

 

분석

무식하게 풀면 될것 같다.

1. 굳이 큐를 안쓰고 리스트를 사용 했다.

2. 리스트 3개를 만든다.

  • A: 순차적으로 우선순위가 저장된 리스트
  • B: 우선순위가 내림 차순으로 정렬된 리스트
  • C: print 목록 리스트

 

3. A 의 첫번째 우선순위와 B 의 우선순위가 같다면 출력

그렇지 않으면 A 의 앞에걸 뒤에 저장 

동시에 C 도 동일한 방법으로 업데이트.

 

4. 만일 A 의 우선 순위와 B 의 우선순위가 같다면

앞에있는걸 삭제 하고 삭제 된것이 원하는 target 이라면 

index를 찾고 중단한다.

 

 

구현

import java.util.*;
import java.util.LinkedList;
import java.util.Queue; 
import java.util.Collections;

class Solution {
    
    public int solution(int[] priorities, int location) {
        int answer = 0;
        
        int ascii2 = (65+location);
        String targetName = new Character((char) ascii2).toString();
        
        List<Integer> priorityQue = new ArrayList<>(priorities.length);
        List<String> printList = new ArrayList<>(priorities.length);
        List<Integer> sortedQue = new ArrayList<>(priorities.length);
        
        for(int i = 0; i < priorities.length; i++) {
            priorityQue.add(priorities[i]);
            sortedQue.add(priorities[i]);
            
            int ascii = (65+i);
            
            String str = new Character((char) ascii).toString();
            printList.add(str);
        }
        
        Collections.sort(sortedQue,  Collections.reverseOrder());
        
        int printedNum = 0;
        while(!priorityQue.isEmpty()) {
            
            int prioty = priorityQue.get(0);
            int sorted = sortedQue.get(0);
            String printName = printList.get(0);
            
            if(prioty == sorted) {
                
                printedNum ++;
                priorityQue.remove(0);
                sortedQue.remove(0);
                printList.remove(0);
                
                if (targetName.equals(printName)) {
                    answer = printedNum;
                    break;
                }
                
            } else {
                priorityQue.remove(0);
                priorityQue.add(prioty);
                printList.remove(0);
                printList.add(printName);
            }
        }
  
        return answer;
    }
}

 

 

결과

728x90
반응형

댓글