본문 바로가기
개발공부_Blog/Algorithm

완주하지 못한 선수

by 소팡팡 2024. 11. 29.

간단 문제 설명

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요

 

https://school.programmers.co.kr/learn/courses/30/lessons/42576

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 해결 IDEA

반복문을 돌려서 map객체에 참여자를 key값으로 저장시킨 뒤에, 완주자와 참여자를 비교해서 map에서 완주자를 제외시킨다 남겨진 참여자를 반환한다.

  • map객체 생성 = new Map()
  • set() → key값으로 데이터 저장
  • 비교하기 has()로 있는지 확인
  • 있으면 delete()로 map객체에서 삭제 없으면 get()으로 map객체에 있는 데이터를 가져와 배열로 변환 뒤, strign으로 반환

예외발생!!! 문제는 ⇒ 동일한 이름의 선수 처리 map객체에 저장되지 않음 → 숫자로 중복 인물을 처리해줌

let num = 4;

function solution(participant, completion) {
  let answer = "";
  let goal = new Map();

  for (let i = 0; i < participant.length; i++) {
    goal.set(participant[i], true);
  }

  for (let i = 0; i < participant.length; i++) {
    if (goal.has(completion[i])) {
      goal.delete(completion[i]);
    }
  }
  return (answer = Array.from(goal.keys()).join());
}

console.log(solution(["leo", "kiki", "eden"], ["eden", "kiki"])); // leo
console.log(
  solution(
    ["marina", "josipa", "nikola", "vinko", "filipa"],
    ["josipa", "filipa", "marina", "nikola"]
  )
); //vinko

console.log(
  solution(["mislav", "stanko", "mislav", "ana"], ["stanko", "ana", "mislav"])
); //mislav

 

v2 풀이

  • new Map() map객체 생성
  • map객체에 데이터를 채워넣는다. key에는 참여자의 데이터, value에는 숫자로 넣는다. 중복되는 key가 있으면 value에 +1을 해야 함으로 get()으로 value를 가져온다. ( 데이터가 없으면 0값을 넣는다 ) get으로 가져온 값에 + 1을 한다
  • map객체가 완성이 되면 완주자 데이터와 비교한다. 완주자가 있으면 delete메서드를 사용하지 않고 value에 -1을 하여 새로운 숫자를 넣어 set()으로 덮어쓰기한다.
  • for-of문에서 배열 구조분해 할당을 사용해서 value가 0이 아닌 것을 반환한다.
function solution(participant, completion) {
  let answer = "";
  let goal = new Map();

  for (let i = 0; i < participant.length; i++) {
    goal.set(participant[i], (goal.get(participant[i]) || 0) + 1);
  }
  
  for (let i = 0; i < participant.length; i++) {
    if (goal.has(completion[i])) {
      goal.set(completion[i], goal.get(completion[i]) - 1);
    }
  }

  for (let [key, value] of goal) {
    if (value > 0) return (answer = key);
  }
  return answer;
}

console.log(solution(["leo", "kiki", "eden"], ["eden", "kiki"])); // leo
console.log(solution(["marina", "josipa", "nikola", "vinko", "filipa"], ["josipa", "filipa", "marina", "nikola"])); //vinko
console.log(solution(["mislav", "stanko", "mislav", "ana"], ["stanko", "ana", "mislav"])); //mislav

 

 

map 객체를 사용해보게 되었다.

댓글