Java Script
[프로그래머스 코딩테스트] 해시 - 완주하지 못한 선수
👉 하루에 한번씩 코딩 실력을 기르기 위해 시작하는 프로그래머스 코딩테스트
👉 코딩테스트 연습 > 해시 > 완주하지 못한 선수
문제 설명 및 제한사항
👉 문제
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
👉 제한사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
정답 및 풀이
👉 정답
function solution(participant, completion) {
var answer = '';
let hash = []
if(
participant.length > 0 && participant.length <= 100000
&& participant.length-1 == completion.length
) {
participant.forEach(name => {
hash[name] = hash[name] ? hash[name] + 1 : 1;
})
completion.forEach(name => {
hash[name] = hash[name] - 1;
})
for (var key in hash) {
if (hash[key] >= 1) answer = key;
}
return answer;
}
}
👉 풀이
- 배열에 중복검사를 통해 답을 찾아내도 되지만 [해시] 문제이기 때문에 해시 접근을 통해서 풀어봅니다.
- 제한사항중 처리 할 수 있는 부분은 if문으로 선처리 해줍니다.
- participant 배열에는 마라톤 참여 선수들의 이름이, completion 배열에는 완주 선수들의 이름이 들어있습니다.
- participant 배열의 값을 hash 배열의 key로 만든 후, hash배열의 key 값이 0(false)면 1을, 아니면 1+1을 시켜줍니다.
- hash배열의 key에 대한 값이 0이 아닌 경우는 동명이인이 있을 경우이기 때문에 동명이인 분기를 위한 1+1처리입니다.
- completion 배열의 값을 hash 배열의 key로 대입하여 hash 배열의 key값을 -1 해줍니다.
- 결과적으로 hash배열의 key값이 0이 된 사람은 completion 배열의 값(완주 한 사람)이 됩니다.
마무리
👉 해시란?
해시 함수, 해시 알고리즘, 해시코드 등 여러가지로 표현 될 수 있지만, 프로그래머스에서 표현한 해시는 본인의 뇌피셜로 데이터를 관리하는 기법중 하나를 뜻하며 검색(search), 삽입(insert), 삭제(delete) 등을 단시간에 할 수 있게 만들어주는 기법을 의미하는게 아닐까 싶다.
👉 javascript foreach(es6) 문법
'Language > JavaScript' 카테고리의 다른 글
[프로그래머스 코딩테스트] 2020 KAKAO BLIND RECRUITMENT - 문자열 압축 (0) | 2022.03.07 |
---|---|
[프로그래머스 코딩테스트] 로또의 최고 순위와 최저 순위 (0) | 2022.03.07 |
[프로그래머스 코딩테스트] 2021 KAKAO - 신규 아이디 추천 (0) | 2022.03.07 |
[JavaScript] sns 간편 회원가입 및 로그인 구현 - facebok 편 (0) | 2020.03.20 |
[JavaScript] sns 간편 회원가입 및 로그인 구현 - kakao 편 (0) | 2020.03.20 |