Javascript로 두 문제를 풀어보았습니다. 관련해서 Javascript 문법이나 특이점을 정리해보고자 합니다. 

1) 완주하지못한선수

HashMap을 사용해서 해결할 수 있는 문제였는데 Javascript에서 HashMap을 정의할 때 아래와 같이 사용합니다.

HashMap에 데이터를 삽입한 후 for loop으로 데이터를 조회할 때에는 아래와 같이 사용합니다. 

이 문제에서는 특별한 로직이 필요없습니다. 여러 풀이법이 있겠지만 HashMap을 이용하면 쉽게 접근할 수 있습니다.

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function solution(participant, completion) {
    var answer = '';
    var myMap = new Map()
    for(let i=0; i<participant.length; i++){
        if(myMap.get(participant[i])==undefined){
            myMap.set(participant[i],1)
        }
        else{
            myMap.set(participant[i], myMap.get(participant[i])+1)
        }
    }
     for (let [key, value] of myMap) {
          console.log(key+" => "+value)
        }
    for(let i=0; i<completion.length; i++){
        if(myMap.get(completion[i])!=0)
            myMap.set(completion[i], myMap.get(completion[i])-1)
    }
    
     for (let [key, value] of myMap) {
          if(value!=0)
              return key
        }
    
    return answer;
}
cs

 

 

2) K번째 수 

k번째 수도 특별한 로직이 요구되는 문제는 아닙니다. 이 문제에서 배운 것은 Javascript 정렬이 default로 문자를 기준으로 정렬하기 때문에 주의해야 합니다. (UTF-16 Code 기준으로 정렬합니다.) 

또, sort 함수는 원본을 변경하기 때문에 주의해야합니다. 새로 array list를 생성해서 정렬 값을 관리해야 합니다. 

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function solution(array, commands) {
    var answer = [];
    for(let i=0; i<commands.length; i++){
        let start = commands[i][0]-1
        let end = commands[i][1]-1
        let length = commands[i][2]-1
        let tarray = []
        for(let j=start; j<end+1; j++)
            tarray.push(array[j])
        
        tarray=tarray.sort((a,b)=>a-b) 
        answer.push(tarray[length])
    }
    console.log(answer)
    return answer;
}
cs

 

특히, array 정렬할 때는 function을 만들어서 적용할 수도 있지만 바로 적용할 수 있는 방법이 있습니다. 

조금 복잡한 정렬에서는 아래와 같이 사용할 수 있습니다. 

화살표 함수를 사용하지 않았을 경우
화살표를 사용했을 경우