๐ ๋ค์ด๊ฐ๋ฉฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ก ํ๋ก๊ทธ๋๋จธ์ค์ ํด์ฌ(Hash) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ '์์ฃผํ์ง ๋ชปํ ์ ์' ๋ฌธ์ ํ์ด๋ฅผ ํ๊ฒ ๋ค.
ํด๋น ๋ฌธ์ ๋ ํด์ฌ(Hash)๋ฅผ ํ์ฉํ์ง ์๊ณ ๋ ํ ์ ์์์ง๋ง, ํ๋ก๊ทธ๋๋จธ์ค์์ ํด์ฌ(Hash) ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด๋ก ๋ถ๋ฅ๋ฅผ ํด๋์๊ธฐ ๋๋ฌธ์ ํด์ฌ(Hash) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์๋ค.
โ ๋ฌธ์
๋ฌธ์ ์ค๋ช
์๋ง์ ๋ง๋ผํค ์ ์๋ค์ด ๋ง๋ผํค์ ์ฐธ์ฌํ์์ต๋๋ค. ๋จ ํ ๋ช ์ ์ ์๋ฅผ ์ ์ธํ๊ณ ๋ ๋ชจ๋ ์ ์๊ฐ ๋ง๋ผํค์ ์์ฃผํ์์ต๋๋ค.
๋ง๋ผํค์ ์ฐธ์ฌํ ์ ์๋ค์ ์ด๋ฆ์ด ๋ด๊ธด ๋ฐฐ์ด participant์ ์์ฃผํ ์ ์๋ค์ ์ด๋ฆ์ด ๋ด๊ธด ๋ฐฐ์ด completion์ด ์ฃผ์ด์ง ๋, ์์ฃผํ์ง ๋ชปํ ์ ์์ ์ด๋ฆ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ๋ง๋ผํค ๊ฒฝ๊ธฐ์ ์ฐธ์ฌํ ์ ์์ ์๋ 1๋ช ์ด์ 100,000๋ช ์ดํ์ ๋๋ค.
- completion์ ๊ธธ์ด๋ participant์ ๊ธธ์ด๋ณด๋ค 1 ์์ต๋๋ค.
- ์ฐธ๊ฐ์์ ์ด๋ฆ์ 1๊ฐ ์ด์ 20๊ฐ ์ดํ์ ์ํ๋ฒณ ์๋ฌธ์๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ์ฐธ๊ฐ์ ์ค์๋ ๋๋ช ์ด์ธ์ด ์์ ์ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
participant | completion | return |
["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
์ ์ถ๋ ฅ ์ ์ค๋ช
์์ #1
"leo"๋ ์ฐธ์ฌ์ ๋ช ๋จ์๋ ์์ง๋ง, ์์ฃผ์ ๋ช ๋จ์๋ ์๊ธฐ ๋๋ฌธ์ ์์ฃผํ์ง ๋ชปํ์ต๋๋ค.
์์ #2
"vinko"๋ ์ฐธ์ฌ์ ๋ช ๋จ์๋ ์์ง๋ง, ์์ฃผ์ ๋ช ๋จ์๋ ์๊ธฐ ๋๋ฌธ์ ์์ฃผํ์ง ๋ชปํ์ต๋๋ค.
์์ #3
"mislav"๋ ์ฐธ์ฌ์ ๋ช ๋จ์๋ ๋ ๋ช ์ด ์์ง๋ง, ์์ฃผ์ ๋ช ๋จ์๋ ํ ๋ช ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ํ ๋ช ์ ์์ฃผํ์ง ๋ชปํ์ต๋๋ค.
๐ก ํ์ด
๋ฌธ์ ๋ฅผ ์ ์ฝ์ด๋ณด๋ฉด '๋จ ํ ๋ช ์ ์ ์๋ฅผ ์ ์ธํ๊ณ ๋ ๋ชจ๋ ์์ฃผํ์์ต๋๋ค.'๋ผ๋ ๋ฌธ์ฅ์ด ์๋ค.
์ฌ๊ธฐ์ return ๊ฐ์ ๋ฌด์กฐ๊ฑด 1๋ช ์ ์ ์๋ง return์ด ๋๋ค๋ ๊ฑธ ์ ์ ์๋ค.
participant ๋ฐฐ์ด์ด ๊ฐ๊ณ ์๋ ๊ฐ(์ฐธ๊ฐ์)๋ค ์ค์์ completion ๋ฐฐ์ด์ ๊ฐ ์ค์ ์๋ ๊ฐ(์ฐธ๊ฐ์)์ ๊ณจ๋ผ์ ์ฐพ์๋ด๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฃผ์ํ ์ ์ ์ ํ์ฌํญ์ '์ฐธ๊ฐ์ ์ค์๋ ๋๋ช ์ด์ธ์ด ์์ ์ ์์ต๋๋ค.'๋ผ๋ ์ ํ์ฌํญ์ด ๋ช ์๋์ด์๋ค.
์ด ์ ๋ค์ ์ ์ํ์ฌ ๋ฌธ์ ๋ฅผ ํ์ด๋ดค๋ค.
ํ์ด ์ฝ๋
function solution(participant, completion) {
let answer = '';
const hash = new Map();
participant.forEach((name) => hash.set(name, (hash.get(name) || 0) + 1));
completion.forEach((name) => hash.set(name, hash.get(name) - 1));
for (const [key, value] of hash) {
if (value > 0) {
answer = key;
}
}
return answer;
}
ํด์ฌ(Hash) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด hash๋ผ๋ ๋ณ์์ Map ๊ฐ์ฒด๋ฅผ ์์ฑํด ์ฃผ์๋ค.
Object Literal์ ์ฌ์ฉํ ์๋ ์์ง๋ง Map ์์ฒด๊ฐ ํด์ฌ(Hash) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ํด ๋ง๋ค์ด์ง ์กด์ฌ์ด๊ธฐ ๋๋ฌธ์ Map์ ํ์ฉํ๋ ๊ฒ ์กฐ๊ธ ๋ ๋ณธ์ง์ ์ผ๋ก ๋ง๋ค๊ณ ์๊ฐํ์ฌ Map์ ์ฌ์ฉํ๋ค.
participant ๋ฐฐ์ด์ ์ํํ๋ฉด์ ์์์ ์์ฑํ
hash์ key: ์ฐธ๊ฐ์ ์ด๋ฆ, value: ์ด๋ฏธ ์ถ๊ฐํ key(์ฐธ๊ฐ์)๊ฐ ์๋ค๋ฉด ํด๋น ๊ฐ์ +1 ์๋๋ฉด 0 + 1์ ํด์ฃผ์๋ค.
value๋ฅผ ์ด๋ ๊ฒ ์ถ๊ฐํ๋ ์ด์ ๋ ์ ํ์ฌํญ์์ ๋๋ช ์ด์ธ์ด ์์ ์ ์๋ค๊ณ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ completion ๋ฐฐ์ด์ ์ํํ๋ฉด์ ํด๋น key(์ฐธ๊ฐ์)์ value๋ฅผ -1 ํด์ฃผ์๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์์ฃผํ ์ ์๋ค์ value๋ 0์ด ๋ ๊ฒ์ด๊ณ , ์์ฃผํ์ง ๋ชป ํ ์ ์์ value๋ 0๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์ง๊ณ ์๊ฒ ๋๋ค.
๋ง์ง๋ง์ผ๋ก hash๋ณ์์ ๋ด๊ฒจ์๋ Map์ ์ํํ๋ฉด์ value๊ฐ 0๋ณด๋ค ํฐ key(์ฐธ๊ฐ์)๋ฅผ ๊ฑธ๋ฌ๋ด๋ฉด ํด๋น key(์ฐธ๊ฐ์)๊ฐ ์์ฃผํ์ง ๋ชป ํ ์ ์๋ก ํ๋ณ ๋๊ฒ ๋๋ค.
โ ์ฑ์