function solution(participant, completion) {
const a = participant.sort()
const b = completion.sort()
for (var i=0; i<a.length; i++) {
if (a[i] !== b[i]) return a[i]
}
}
var solution=(_,$)=>_.find(_=>!$[_]--,$.map(_=>$[_]=($[_]|0)+1))
์์ฃผ์ ๋ฐฐ์ด์ {์ด๋ฆ:์์ฃผ์๋ฐฐ์ด์ ๋ฑ์ฅํ๋ ํ์}๋ก ๋งตํํ๊ณ ,
๊ทธ ๋งต์ ์ฐธ๊ฐ์ ์ด๋ฆ ํ๋์ฉ ๋ฃ์ด์ ์ฐพ์๋ณผ๋๋ง๋ค ํ์ ๋จ์ด๋จ๋ ค์ ํ์ 0๋์ค๋ ๋ ์ฐพ์๋ฑ๋ ํจ์
๋ผ๊ณ ํ๋ค..
์ ๊ทํํ์์ ์ผ๋จ ์ ์ณ๋๋๋ผ๋,
var solution=(participant,completion)=>participant.find(name=>!completion[name]--,completion.map(name=>completion[name]=(completion[name]|0)+1))
โโโ
function solution(participant,completion) {
return participant
.find(name=>!completion[name]--,completion.map(name=>completion[name]=(completion[name]|0)+1))
}
arr.find(callback[, thisArg])
์ฌ๊ธฐ์ thisArg๋ ์ ํ ํญ๋ชฉ. ์ฝ๋ฐฑ์ด ํธ์ถ๋ ๋ this๋ก ์ฌ์ฉํ ๊ฐ์ฒด
์ธ๋ฐ find ์์ ์ฝ๋ฐฑํจ์์์ ์ฒซ๋ฒ์งธ๋ณด๋ค thisArg์ ํจ์๊ฐ ๋จผ์ ์คํ๋๋ค๊ณ ํ๋ค.
์ง๊ธ ์ด thisArg ๋ถ๋ถ์ map ํจ์๊ฐ ๋ค์ด์๊ณ ,
๊ทธ๋์ ๋งตํจ์๊ฐ ๋จผ์ ์ ํ ๋ ํ ์ฝ๋ฐฑํจ์์์ ์ด์ฉํ ์ ์๊ฒ ๋ ๊ฒ์ด๋ค.
completion[name]=(completion[name]|0)+1
- name์ completion์ ๊ฐ ์ธ์
- completion[name]์ ์ ์๋ฅผ ํ๋๋ฐ (=), OR ์ ์ฌ์ฉํด์
- "๋ง์ฝ completion[name]์ด ์กด์ฌํ๋ฉด, ๊ทธ ๊ฐ์ +1 ์ ํ ๊ฒ", ์ด๊ณ , "์กด์ฌ ์ํ๋ฉด, 0 + 1 (์ฆ 1)"
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐฐ์ด์ ์ฌ์ค, ๊ฐ์ฒด์ ๋๋ค. typeof ๋ก ์๋ฌด ๋ฐฐ์ด ๋ง๋์ ์ ํ์ธํด๋ณด์๋ฉด ์ค๋ธ์ ํธ๊ฐ ๋์ค์ฃ . ๊ทธ๋ฌ๋ฏ๋ก completion[name]์ ํ๋ฉด ๋จ์ํ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฒด์์ 'key-value' ํ์ด์์ ๋ฐธ๋ฅ ์ ๊ทผํ๋ฏ์ด "completion ๊ฐ์ฒด ์ค name์ด๋ผ๋ ํค์ ๊ฐ์ด ๋ญ๋" ๊ฐ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ์ ๊ทธ๋ฐ ํค-๋ฐธ๋ฅ ํ์ด๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด undefined๋ฅผ ๋ฆฌํดํ๊ฒ ๋๊ณ , ์ด๊ฒ์ false๊ฐ ๋๋ฏ๋ก, ์์ OR ๊ตฌ์ ์์ ์์ด false์์ผ๋ฏ๋ก ๋ค์ ๊ฐ์ธ 0 ์ด ์ถ๋ํ๊ฒ ๋๊ณ , ์ค์ ๋ก ์ ์๋๋ ๊ฐ์ 0 + 1์ธ 1 ์ด๋์ฃ . ๊ทธ๋ฌ๋ฏ๋ก ์ปดํ๋ฆฌ์ ๋ฐฐ์ด ์์ "ํ๋๋ง ์๋ ์ด๋ฆ"์ ๋ชจ๋ ์ด๋ฆ : 1 ์ด๋ ๊ฒ ๋ณํ๊ฒ ๋ฉ๋๋ค.
๋ง์ฝ์ ์ด๋ฆ์ด ๋๊ฐ์ธ ๊ฒฝ์ฐ์๋ completion[name]์ด ์ด๋ฏธ ์กด์ฌํด์ 1 ์ด๋ผ๋ ๊ฐ์ ๋ฆฌํด ํ ๊ฑฐ๊ณ , ๊ทธ๋ฌ๋ฉด 1 + 1 ์ด๋์ด์ 2๊ฐ๊ฐ ๋๊ณ , ์ด๋ฆ์ด ๋ ๋ง์ผ๋ฉด ๋ญ ๊ณ์ ๋ํด์ง๊ฒ ์ฃ .
completion ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ด ์์ ์ ๋๋ด์ฃผ๋ฉด ์ด '๋งตํ์ ' ๋ถ๋ถ์ ์กด์ฌ ์ด์ ๊ฐ ๋ฌ์ฑ์ด ๋๊ณ completion์ ์ฒ์์ ์ธํ ๋ฐ์๋ ๋ฐฐ์ด์ด ์๋, ์ด๋ฆ: ๊ฐฏ์ ๋ค์ด "์ถ๊ฐ๊ฐ ๋" ๋ฐฐ์ด์ด ๋์ฃ . ์ค์ ๋ก ๋ฐ๋ ๋ฐฐ์ด์ ์ฒดํฌํด๋ณด๋ฉด ์ด๋ ์ต๋๋ค. ['cake', 'ball', 'sauce', 'cake', cake: 2, ball: 1, sauce: 1]. ์กฐ๊ธ ์๊ธด ๋ชจ์ต์ด์ฃ .
๋ณธ๋ก ์ผ๋ก ์ค๋ฉด์ด์ , ์ฐ๋ฆฌ์ completion์ ์์ ์ด ๋๋ ์ํ์ด๋ฏ๋ก ์๋ถ๋ถ์ ๋ชจ๋ ์ด๋ฆ์ด ์คํธ๋ง์ผ๋ก ๋ค์ด์๊ณ , ๊ทธ๊ฑฐ์ ์ด์ด์ ๊ฐ ์ด๋ฆ์ ๊ฐฏ์๊ฐ ํค-๋ฐธ๋ฅ ํจ์ด๋ก ๋ค์ด์์ต๋๋ค. ๋จผ์ find๋ ๋ค ํ ์คํธ์ "ํธ๋ฃจ"๋ฅผ ์ฃผ๋ ์ฒซ๋ฒ์งธ ์์๋ฅผ ๋ฆฌํดํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ !completion[name]-- ์ด๊ฒ ๋ฌด์จ ํ ์คํธ์ธ์ง๋ฅผ ๋ณด๊ณ , ์ด๋ค ๊ฒฝ์ฐ์ 'ํธ๋ฃจ'๋ฅผ ์ฃผ๋๋๋ฅผ ์๊ฐํด๋ณด๋ฉด ๋๊ฒ ์ฃ .
!completion[name]-- ์ฌ๊ธฐ์ ์ค์ํ๊ฑด 2๊ฐ์ ๋๋ค. completion[name]์ ๋ค๋ค ์์๋ค์ํผ ์ด์ ๊ทธ ํด๋น ์ด๋ฆ์ '๊ฐฏ์'๋ฅผ ๋ถ๋ฌ์ฌ ๊ฑฐ์ฃ . ์ค์1: ๋๋ํ๋ ๋ญํ๊ณ ์๋? ์ด๊ฑด ๊ฐ๋จํ ๋๋ํ ๋ค์ ๊ฐ์ "๋ถ๋ฆฌ์ธ"์ผ๋ก ๋ฐ๊ฟ์ฃผ๋๋ฐ, ๋ฐ๋๋ก ๋ฐ๊ฟ์ค๋๋ค. !true๋ฉด ๊ฑฐ์ง์ด ๋์จ๋ค๋ ๋ง์ด์ฃ . ๋ !0, !5, !''๋ฑ ํ ์คํธ๋ฅผ ํด๋ณด์ธ์. ์ฐธ๊ณ ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ '๊ฑฐ์ง'์ด ๋๋ ๋ฐธ๋ฅ๋ ์ด 7๊ฐ๋ฟ์ ๋๋ค. (false, 0, -0, NaN, null, undefined, ''). ์ค์2: -- ๋ ๋ค ์์๋ค์ํผ 1์ ์ญ๊ฐํ๋๋ฐ, ์ฌ๊ธฐ์ ์ค์ํ๊ฑด 'ํ์น'๋ผ๋ ๊ฒ๋๋ค. ์ฆ ๊ฐ์ ๋ถ๋ฌ์ค๊ณ , !์ ํตํด ์ฐธ๊ฑฐ์ง ํ๋ณ์ ํ๊ณ , ๊ทธ ์ด์ ๊ณ์ฐ์ด ๋ค ๋๋๊ณ ๋ค์ ์ด๋ก ๊ฐ ๋์ผ ๊ฐ์ด ๋ฐ๋๋๊ฑฐ์ฃ . "๋ถ๋ฌ์จ ์๊ฐ์ ๊ฐ"์ผ๋ก ์ฐธ๊ฑฐ์ง ํ๋ณ์ ํ๋ค๋ ๊ฒ ์ค์ํฉ๋๋ค.
participant์ find๋ฅผ ํ์ผ๋ฏ๋ก ์ด์ ๋ชจ๋ ์ฐธ๊ฐ์์ ์ด๋ฆ์ ๊ฐ๊ณ completion์ ์ด ์ด๋ฆ์ด ๋ช ๊ฐ ์กด์ฌ ํ์๋๋ฅผ ๋ณด๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ง์ฝ์ ์ด๋ฆ์ด 1๊ฐ ์์ผ๋ฉด "๋ถ๋ ค์ค๋ ์๊ฐ์๋ 1์ด๋ฏ๋ก ์ด๊ฒ์ ๋ถ๋ฆฌ์ธ์ผ๋ก ๋ณด๋ฉด ์ฐธ", ๊ทธ๋ฆฌ๊ณ find์ ์ฐธ๊ฑฐ์ง ํ๋ณ์ ์์ ! ๋๋ํ๋ก ์ธํด ์ฐธ์ ๊ฑฐ์ง์ผ๋ก ๋ณํด์ '๊ฑฐ์ง'์ด ๋ฉ๋๋ค. 1 ์ด์์ด์์ด๋ ๋ง์ฐฌ๊ฐ์ง๋ก 0์ด์์ ์ซ์์์๊ฑฐ๋๊น, ๊ฑฐ์ง์ผ๋ก ํ๋ช ์ด ๋๊ณ find ํจ์๋ ๊ณ์ ์ด์ด์ง๋๋ค. ๊ทธ๋ฌ๋ฉด ์ธ์ "์ฐธ"์ด ๋์ค๋๋ฉด, ๊ทธ๊ฒ์ completion[name]์ด '๊ฑฐ์ง'์ด ๋๋ ๊ฐ์ ๋ฐํํ์ ๋ ๋ฟ์ ๋๋ค.
ํ ์ํฉ์์ completion[name] ์ ์ํํ ํ์ ๋์ฌ ์ ์๋ ๊ฑฐ์ง์ด ๋ ๊ฐ์ 0 ์ด๊ฑฐ๋, ์๋๋ฉด 'name'์ ํด๋นํ๋ ํ์ด๊ฐ completion์ ์กด์ฌํ์ง ์์ ๋๋ undefined๋ฅผ ๋ฆฌํด ํ๊ฒ ์ฃ . ๊ทธ๋ผ false๋ค์ ๋ฆฌํดํ๊ฒ ๋๊ณ , ! ๋ก ์ธํด์ true๋ก ๋ฐ๋๊ณ ์ ๋ต ๊ฐ๋ด๋ฐ๋ ํ๊ฒ๋๋๊ฑฐ์ฃ .
์ฐธ๊ณ ๋ก '0'์ ๋ฆฌํดํ๋ ๊ฒฝ์ฐ์๋ '๋๋ช ์ ์ฐธ๊ฐ์๊ฐ 2๋ช ์ด์ ์์๋๋ฐ, ๊ทธ์ค์ 1๋ช ์ด ์๋ค์ด์์ ๋', ์ด๊ณ undefined๋ฅผ ๋ฆฌํดํ๊ฒ ๋๋ ๊ฒฝ์ฐ๋ '๋ชป๋ค์ด์จ ์ด๋ฆ์ด 1๊ฐ ๋ฟ์ด์๊ณ ๊ทธ์ฌ๋์ด ๋ชป๋ค์ด์์๋' ์ ๋๋ค. ์ฌ๋ด์ผ๋ก undefined์ ! ๋๋ํ ๋๋ฆฌ๊ณ ๋์ ํ์น๋ก -- ๋ฅผ ๋๋ ค์ฃผ๋ฉด ํด๋น ํค๋ฐธ๋ฅ ํ์ด๊ฐ ์กด์ฌํ๊ฒ ๋๊ณ , ๊ฐ์ NaN์ด ๋ฉ๋๋ค.
์ด ๊ฐ๋
์์ฒด๋ ๋์ค์ ์จ๋จน์ ์ ์์ ๊ฒ ๊ฐ๋ค.
์... ๊ฐ์ ์์๊ฐ ๋ช ๊ฐ๊ฐ ์๋์ง ์ฐพ์ ๋?
๊ทผ๋ฐ ์ ๋งตํํ ๊ฒ ์ถ๊ฐ๊ฐ ๋๋์ง ๋ชจ๋ฅด๊ฒ ๋ค...
(์ฐธ๊ณ )
find ์ ์ธ๋ฑ์ค๊ฐ ์ถ๊ฐ ๊ฐ๋ฅํ์ง ๊ถ๊ธํ๋๋ฐ ๊ฐ๋ฅํ๊ฐ๋ด!!
answer = participant.find((el, index) => el !== completion[index]);
์๋ ๋๋ ์ด๋ ๊ฒ ํ๊ณ ์ถ์๋๊ฑด๋ ์ธ๋ฑ์ค๊ฐ ์ถ๊ฐ๋๋์ง ๋ชฐ๋์์...
๐ ์ํผ ์ฌ๊ธฐ์ ๋ด๊ฐ ๋ฐฐ์ด ๊ฒ!
- find์ ๋ ๋ฒ์งธ ์ธ์๋ก index๋ ๋ฃ์ ์ ์๋ค๋๊ฑฐ!
- ๋ฐฐ์ด ๋๋ ์ค๋ธ์ ํธ์์ ๊ฐ์ ๊ฐ์ ๊ฐ๋ ์์์ ๊ฐ์๋ฅผ map์ ํตํด ์ฝ๊ฒ ๊ตฌํ ์ ์๋ค!
.map(name=>completion[name]=(completion[name]|0)+1)