IT/코딩 테스트 연습

프로그래머스 코딩 테스트 - 프린터

Lyk 2021. 1. 5. 22:22
728x90
반응형

반성하는 마음으로 코딩테스트 기록을 박제ㅎㅎ

 

열심히 하겠습니다

 

스택/큐 > 프린터 입니다.

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

프린터

문제

출처 : 프로그래머스
출처 : 프로그래머스

 

 

 

 

 

 

 

 

 

 

 

 

 

나만의 풀이

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        int i = 0;
        
        while(true){
            if(checkNum(priorities, priorities[i])){
                answer++;
                priorities[i] = 0;
                if(location == i) break;
            }
            if(++i == priorities.length) i = 0;
        }
        
        return answer;
    }
    
    private boolean checkNum(int[] list, int num){
        for(int li : list)
            if(li > num) return false; 
        return true;
    }
}

 

해설 ↓

더보기

문제를 다 풀고나면 다른 사람 코드를 볼 수 있어 살펴보았는데

아무래도 큐, 스택 문제여서 큐를 사용한 사람도 있었고,

컬렉션(리스트)을 사용하여 진짜 문제처럼 뺑뺑 돌려서 푼 분도 있었는데,

 

저는 이 문제는 굳이 컬렉션을 쓰지 않아도 될 것 같아 배열 그대로 풀어보았습니다!

 

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        int i = 0;
        
        while(true){
        	// ① checkNum에 배열과, 현재 비교하려는 수를 인자값으로 넣어줍니다.
            if(checkNum(priorities, priorities[i])){
            	// ③ 위의 조건문이 true 라면, 이번 차례였던 인쇄물이 우선순위가 가장 커서
                // 출력이 되었다는 뜻이므로
                
                answer++; // ④ 카운트 해줍니다.
                // answewr은 몇 번째로 프린트 되었는지 카운트하기 위한 변수입니다.
                
                // ⑤ 이번에 출력된 프린트물의 우선순위는 0으로 바꿔줍니다.
                priorities[i] = 0;
                
                // ⑥ 이번에 출력했던 인쇄물이 내가 뽑으려 했던 인쇄물이라면 반복문을 종료시킵니다.
                if(location == i) break;
            }
            // ⑦ 반복문이 아직 종료되지 않았다면 다음 인쇄물을 체크하기 위해 i를 증가시켜주고
            // i가 index 범위를 초과했다면 0으로 초기화 해줍니다.
            if(++i == priorities.length) i = 0;
        }
        
        return answer;
    }
    
    // ② 이 메서드는 num이 배열에 있는 수 중에 제일 크다면 true, 작다면 false를 반환합니다.
    private boolean checkNum(int[] list, int num){
        for(int li : list)
            if(li > num) return false; 
        return true;
    }
}

 

 

728x90
반응형

'IT > 코딩 테스트 연습' 카테고리의 다른 글

프로그래머스 코딩 테스트 - 124나라  (2) 2021.01.18