{프로그래머스} 스택/큐 > 프린터 (Java, JavaScript ES5)

문제 링크

생각한대로 잘 푼 첫 케이스..

사실 문제에서 제시한 방법 그대로 풀었다.

그에 앞서 location을 기억하기 위해 객체 배열로 변경하였음.

JavaScript

// 배열 내에 특정 값 보다 큰 값이 있는지 체크
function compare(arr, param){
    var result = false;
    for(var index = 0; index < arr.length; index++){
        if( arr[index].priority > param ){
            result = true;
        }
    }
    return result;
}

function solution(priorities, location) {
    var answer = 1;
    
    var index = 0;
    var temp = new Array();    
    
    for(; index < priorities.length; index++){
        temp[index] = { location : index, priority : priorities[index] };
    }
    
    while( true ){
        var oTemp = temp[0];
        temp.shift();
        
        if( compare(temp, oTemp.priority) == true ){
            temp.push(oTemp);
        } else {
            if(oTemp.location !== location){
                answer = answer + 1;
            } else {
                break;
            }
        }        
    }    
    return answer;
}

Java
자바스크립트로 풀이한 내용을 자바로 그대로 재구현했다.

오브젝트 대신 HashMap을 사용하였고,
배열대신 리스트 (List<HashMap<String, Integer>>) 형태를 사용했다.

import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.Map;
import java.util.HashMap;

class Solution {
    
    public boolean compare(List<Map<String, Integer>> list, int param){
        boolean result = false;
        for(int index = 0; index < list.size(); index = index + 1){
            Map<String, Integer> map = list.get(index);
            int priority = (Integer) map.get("priority");

            if( priority > param ){
                result = true;
                break;
            }
        }
        return result;
    }
    
    public int solution(int[] priorities, int location) {
        int answer = 1;
        
        List<Map<String, Integer>> aTemp = new ArrayList<Map<String, Integer>>();
        for(int index = 0; index < priorities.length; index = index + 1){
            Map<String, Integer> temp = new HashMap<String, Integer>();
            temp.put("location", index);
            temp.put("priority", priorities[index]);
            aTemp.add( temp );
        }

        while( true ){
            Map<String, Integer> oTemp = aTemp.get(0);
            aTemp.remove(0);

            if( compare( aTemp, oTemp.get("priority")) == true ){
                aTemp.add(oTemp);
            }else{
                if(oTemp.get("location") != location){
                    answer = answer + 1;
                }else{
                    break;
                }
            }
        }
        return answer;
    }
}

좋은 웹페이지 즐겨찾기