문제
https://school.programmers.co.kr/learn/courses/30/lessons/42576
설계
- for문으로 확인 및 remove로 삭제해 남은 사람을 return
- test case중 정확성 테스트는 모두 통과하였으나 효율성 테스트에서 모두 탈락하였다.
- Hash를 사용해야 하는 것을 배우고 코드를 다시 적용하여 제출 및 성공했다.
# 효율성 테스트를 통과하지 못한 코드
def solution(participant, completion):
for person in completion:
if person in participant: # 도전자 명단에 완주자가 있다면 삭제
participant.remove(person)
answer = ''.join(participant) # 미완주 도전자 : list -> 문자열로 변환
return answer
python 풀이
# Hash Map을 활용한 풀이
def solution(participant, completion):
hashMap = {}
sumHashKey = 0
for part in participant:
hashMap[hash(part)] = part # 도전자의 해쉬 맵을 생성한다.
sumHashKey += hash(part) # 해쉬키를 누적 더해준다.
for comp in completion:
sumHashKey -= hash(comp) # 완주자의 해쉬 키들을 빼준다.
return hashMap[sumHashKey] # 1명이 완주하지 못했으므로 그 사람의 키값을 넣어준다.
javaScript 풀이
- completion의 배열 개수가 participant 보다 1개 적어서 for문으로 돌 경우 index error가 발생하지 않을까 걱정했지만 completion에서 index를 초과할 경우 undefined가 출력되어 결과적으로 error가 발생하지는 않는다.
function solution(participant, completion) {
participant.sort()
completion.sort()
var answer = '';
for (var i = 0; i < participant.length; i++) {
if (participant[i] !== completion[i]) {
answer = participant[i];
break
}
}
return answer;
}
DevYoon님의 풀이(JavaScript)
- 나와는 다른 풀이 방법으로, 완주자가 1명 이상일 경우도 확인이 가능하다
- hash map에 하나씩 담고 완주한 사람들을 하나씩 뺀다
Blog :https://studyoon.tistory.com/
function solution(participant, completion) {
var answer = "";
let isComple = {};
participant.map((word)=>{
if(word in isComple){
isComple[word] += 1
}else{
isComple[word] = 1
}
})
completion.map((word)=>{
isComple[word] -= 1
})
let keys = Object.keys(isComple)
keys.map((word)=>{
if(isComple[word] === 1){
answer = word;
}
})
return answer;
}
'PS (Problem Solving) > Programmers' 카테고리의 다른 글
[프로그래머스] 음양 더하기 (0) | 2022.08.08 |
---|---|
[프로그래머스] 내적 (0) | 2022.08.08 |
[프로그래머스] 크레인 인형뽑기 게임 - 자바스크립트, 파이썬 (0) | 2022.08.04 |
[프로그래머스] 신규 아이디 추천 (0) | 2022.07.28 |
[프로그래머스] 신고 결과 받기 - 파이썬 (0) | 2022.07.27 |