오늘의 알고리즘 👍
📝 1. 완주하지 못한 선수
- 수많은 마라톤 선수들이 마라톤에 참여하였습니다.
- 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
- 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때,
- 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
▷ 입출력 예
solution(["leo", "kiki", "eden"], ["eden", "kiki"])
solution(["marina", "josipa", "nikola", "vinko", "filipa"], ["josipa", "filipa", "marina", "nikola"])
solution(["mislav", "stanko", "mislav", "ana"], ["stanko", "ana", "mislav"])
▷ 내 풀이
function solution(participant, completion) {
participant.sort();
completion.sort();
for (let i = 0; i < participant.length; i++) {
if (participant[i] !== completion[i]) {
return participant[i];
}
}
}
❗ splice 매서드
- 배열에서 사용 가능한 매서드
- 1) 지정한 배열의 특정 구간에 존재하는 요소를 제거할 수 있다.
- 2) 지정한 배열의 특정 구간에 요소를 추가할 수 있다.
- 예)
const arr = [1, 2, 3, 4]
arr.splice(3, 4)
const arr = [1, 2, 3, 4]
arr.splice(1, 1)
arr
arr.splice(1, 0, 'a')
arr
▷ splice 매서드 사용 풀이 (효율성 검사 실패)
function solution(participant, completion) {
for (let i = 0; i < completion.length; i++) {
if (participant.includes(completion[i])) {
participant.splice(participant.indexOf(completion[i]), 1);
}
}
return participant;
}
▷ hash 사용 풀이
function solution(participant, completion) {
const answer = {};
for (let i = 0; i < participant.length; i++) {
!answer[participant[i]] ? (answer[participant[i]] = 1) : answer[participant[i]]++;
}
for (let i = 0; i < completion.length; i++) {
answer[completion[i]]--;
}
for (let key in answer) {
if (answer[key]) {
return key;
}
}
}
▷ filter 매서드 사용 풀이
function solution(participant, completion) {
participant.sort();
completion.sort();
const answer = participant.filter((name, i) => {
return name !== completion[i];
});
return answer[0];
}
출처: 프로그래머스
출처: 코드캠프