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
엇 구미분이신가요??