마이의 개발 블로그

[프로그래머스] 프린터 (Java) 본문

코딩테스트/프로그래머스

[프로그래머스] 프린터 (Java)

개발자마이 2023. 1. 27. 16:33
반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

우선순위 대기열이다보니 스택이나 큐를 사용해서 풀어보려고 했는데 결국 반복문으로 해결했다.

 

- 계속 한쪽방향으로 순회하며

  1) 문서의 가장 큰 우선순위 여부 체크

  2) 가장 큰 우선순위인 경우 프린트 (해당 문서 우선순위를 0으로 변경) 

  3) 프린트 순서(order) 증가

  4) 프린트된 문서가 location인 경우 순서 반환

 

Note

- 이 문제의 경우 탐색이 끝난 후 다음 index로 넘어갈 때 자동으로 이전 index의 문서가 마지막 프린트 우선순위가 되므로 별도로 문서의 우선순위를 저장할 필요가 없다고 판단했다. 탐색의 순서가 중간에 바뀌어야 하는 예외 상황들이 있거나 매회 체크해야하는 종료조건이 까다로웠다면 다른 자료구조를 활용했을 것이다.

-  프로그래머스 스택/큐 문제들은 아직까지는 꼭 그 자료구조를 활용하여 풀지 않아도 해결되는 경우가 종종 있는 것 같다.

class Solution {
    public int solution(int[] priorities, int location) {
                        
        int idx = 0;
        int order = 0;
        
        while(true){
            
            int doc = idx % priorities.length;
            Boolean isHighest = true;
            
            for(int p : priorities){
                if(p > priorities[doc]){
                    isHighest = false;
                    break;
                }
            }
            
            if(isHighest){
                priorities[doc] = 0;
                order++;
                if(doc == location){
                    return order;
                }
            }
            idx++;    
        }   
    }
}
반응형
Comments