https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(participant, completion) {
for (name of completion){
let index = participant.indexOf(name);
participant.splice(index, 1);
}
return participant.join();
}
이렇게 풀었으나 시간초과가 나왔다.
아무래도 array말고 object를 사용해서 해봐야겠는데
function solution(participant, completion) {
let obj = new Object();
let answer = '';
for (name of completion) {
if (obj.name == undefined) {
obj.name = 1;
} else {
obj.name++;
}
}
for (name of participant) {
if (obj.name == 0 || obj.name == undefined) {
answer = name;
break;
} else {
obj.name--;
}
}
return answer;
}
처음에 이렇게 해봤다가,
계속 엉뚱한 이름이 나와서
결국 디버그를 돌려보았는데,
아에 object자체가 생성이 안되고있는 것이다.
object의 key 접근할때 변수명을 쓰려면 . 이 아니라 [] 안에 써야하는걸 알게 됨.
즉, name이라는 변수명으로 object에 접근, 생성하려면,
obj.name = 1;
이러면 변수가 아닌 name이라는 이름으로 계속 재할당이 되어버리고,
obj.[name]=1;
이렇게 해야한다!
특히 괄호 안에 '' 없음 유의.
점을 사용하면 '' 까지 같이 축약되어 들어가있어서 그런것 같음.
아래는 수정한 답안
function solution(participant, completion) {
let obj = new Object();
let answer = '';
for (name of completion){
if( obj[name] == undefined){
obj[name] = 1;
} else {
obj[name]++;
}
}
for(name of participant){
if(obj[name]==0 || obj[name]==undefined){
answer = name;
break;
} else {
obj[name]--;
}
}
return answer;
}
요렇게 했다.