[프로그래머스] javascript - 풀이1

summer_joy·2022년 6월 17일
0

문제 바로가기

완주하지 못한 선수

문제

1. 문제 풀이

구해야 할 것은 완주하지 못한 자를 골라내는 것이다. 즉, completion 배열에는 없고 participant 배열에는 있는 사람을 찾으면 된다.

처음 생각한 것은 아래와 같다.

  1. 두 배열을 정렬한다.
  2. 반복문을 이용해 두 배열의 요소를 비교한다.
  3. 만약 두 배열의 요소가 같지 않다면 다음의 두 가지 경우다.
    3-1. 동명이인이 존재하고, 그 중 한명이 완주자가 아니다.
    3-2. participant에는 존재하고 completion에는 없다. 즉, 완주자가 아니므로 participant쪽 요소를 리턴한다.
  4. 반복문을 끝까지 완수했는데도 정답이 안나온다 -> participant배열의 마지막 요소를 리턴한다.

2. 접근 방법

1) participant를 map에 저장하면서, key는 참가자 이름, value는 동명이인이 이미 존재한다면 +1, 없으면 1로 넣어준다.

    for (let person of participant){
        if(!map.get(person)){
            map.set(person, 1);
        }else{
            map.set(person, map.get(person)+1);
        }
    }

2) completion을 돌면서 한 명씩 map의 해당하는 이름의 값이 1이면 엘리먼트를 삭제, 2 이상이라면 -1 해준다.

    for(let person of completion){
        if(map.get(person) >= 2){
            map.set(person, map.get(person) - 1);
        } else {
            map.delete(person);
        }
    }

3) 마지막 남은 원소를 리턴해준다.

    for(let person of participant){
        if(map.get(person) && map.get(person) >= 1 ){
            answer = person;
        }
    }

3. 해답 코드

function solution(participant, completion) {
    let answer = ''
	const map = new Map();

    for (let person of participant){
        if(!map.get(person)){
            map.set(person, 1);
        }else{
            map.set(person, map.get(person)+1);
        }
    }

    for(let person of completion){
        if(map.get(person) >= 2){
            map.set(person, map.get(person) - 1);
        } else {
            map.delete(person);
        }
    }
    
    for(let person of participant){
        if(map.get(person) && map.get(person) >= 1 ){
            answer = person;
        }
    }
    
    return answer
}
profile
💻 Hello world

0개의 댓글