function solution(participant, completion) {
for (let p of completion) {
let i = participant.indexOf(p);
participant.splice(i, 1);
}
return participant[0];
}
정확성 테스트는 통과했는데 효율성 테스트에서 실패 🥲
이중for문이 아니어서 괜찮을 줄 알았는데 아니었나보다...
sort를 이용한 방식function solution(participant, completion) {
const n = participant.length;
let answer = '';
participant.sort();
completion.sort();
for (let i = 0; i < n; i++){
if (participant[i] !== completion[i]) {
answer = participant[i];
return answer;
}
}
}
sort를 이용해 배열을 정렬한 후 for문을 돌며 완주하지 못한 참가자를 찾는 방법
간단하고 효율적인 듯!
object 를 이용한 방식function solution(participant, completion) {
const obj = {}
for (let p of participant) {
obj[p] = obj[p] ? obj[p] + 1 : 1;
}
for (let c of completion) {
obj[c] -= 1;
}
for (let key in obj) {
if (obj[key] == 1) {
return key;
}
}
}
participant 배열을 돌면서 참가자 이름을 객체 key로, value로 1을 설정completion 배열을 돌면서 완주한 참가자 이름을 key로 찾아 value를 0으로 만들어줌
for ... in명령문은 상속된 열거 가능한 속성들을 포함하여 객체에서 문자열로 키가 지정된 모든 열거 가능한 속성에 대해 반복합니다. (Symbol로 키가 지정된 속성은 무시합니다.)
for ... of명령문은 반복가능한 객체 (Array, Map, Set, String, TypedArray, arguments 객체 등을 포함)에 대해서 반복하고 각 개별 속성값에 대해 실행되는 문이 있는 사용자 정의 반복 후크를 호출하는 루프를 생성합니다.
for ... in 과 for ... of 의 차이for ... in 루프는 객체의 모든 열거가능한 속성에 대해 반복
for ... of 구문은 컬렉션 전용
for ... of 구문은 모든 객체보다는, [Symbol.iterator] 속성이 있는 모든 컬렉션 요소에 대해 이 방식으로 반복
Object.prototype.objCustom = function () {};
Array.prototype.arrCustom = function () {};
let iterable = [3, 5, 7];
iterable.foo = "hello";
for (let i in iterable) {
console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
}
for (let i of iterable) {
console.log(i); // logs 3, 5, 7
}
function solution(participant, completion) {
var dic = completion.reduce((obj, t) => (obj[t] = obj[t] ? obj[t] + 1 : 1 , obj), {});
return participant.find(t => {
if(dic[t]) dic[t] = dic[t] - 1;
else return true;
});
}
reduce를 사용reduce의 콜백 함수의 , obj : 가공된 object를 통째로 리턴, {} : 원본 배열에 빈 객체 할당https://programmers.co.kr/learn/courses/30/lessons/42576?language=javascript
https://miiingo.tistory.com/338
http://yoonbumtae.com/?p=3578
엇 구미분이신가요??