π νλ‘κ·Έλλ¨Έμ€ 42576 : μμ£Όνμ§ λͺ»ν μ μ - Javascript
λ¬Έμ μ€λͺ
μλ§μ λ§λΌν€ μ μλ€μ΄ λ§λΌν€μ μ°Έμ¬νμμ΅λλ€. λ¨ ν λͺ μ μ μλ₯Ό μ μΈνκ³ λ λͺ¨λ μ μκ° λ§λΌν€μ μμ£Όνμμ΅λλ€.
λ§λΌν€μ μ°Έμ¬ν μ μλ€μ μ΄λ¦μ΄ λ΄κΈ΄ λ°°μ΄ 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"λ μ°Έμ¬μ λͺ λ¨μλ λ λͺ μ΄ μμ§λ§, μμ£Όμ λͺ λ¨μλ ν λͺ λ°μ μκΈ° λλ¬Έμ νλͺ μ μμ£Όνμ§ λͺ»νμ΅λλ€.
νμ΄ κ³Όμ
μ 체 μ μ(participant) μ€ μμ£Όν μ μ(completion) λͺ©λ‘μ μ‘΄μ¬νμ§ μλ μ μ ν λͺ μ μ°Ύμλ΄μΌ ν©λλ€.
μλ 1
splice
μ indexOf
λ₯Ό μ΄μ©ν΄ μμ£Όν μ μ(completion)λ₯Ό μ 체 μ μ(participant)μμ νλμ© μκ±°ν λ€, λ¨μ ν μ μμ μ΄λ¦μ λ°ννλ λ°©μμΌλ‘ νμ΄λ΄€μ΅λλ€.
function solution(participant, completion) {
// μ 체 μ μ λͺ©λ‘μμ μμ£Όν μ μμ μ΄λ¦μ νλμ© μκ±°
for (name of completion) {
participant.splice(participant.indexOf(name), 1);
}
// μ 체 μ μ λͺ©λ‘μμ λ¨μμλ μ μμ μ΄λ¦μ λ°ν
return participant[0];
}
νμ§λ§ μ νλ ν
μ€νΈλ ν΅κ³Όνκ³ μκ° μ΄κ³Όλ‘ ν¨μ¨μ± ν
μ€νΈλ ν΅κ³Όνμ§ λͺ»νμ΅λλ€. λ°°μ΄μ μμ νλ splice
κ° λ리기 λλ¬Έμ μκΈ΄ λ¬Έμ μΈ λ― ν©λλ€.
μλ 2
μλμ κ°μ΄ ν΄μ¬λ₯Ό μ΄μ©ν΄ λ¬Έμ λ₯Ό λ€μ νμκ³ , μ±κ³΅μ μΌλ‘ ν¨μ¨μ± ν μ€νΈκΉμ§ ν΅κ³Όνμ΅λλ€.
function solution(participant, completion) {
// μμ£Όν μ μμ μ΄λ¦μ κ°μλ₯Ό μ μ₯ν λ³μ μ μΈ
const counts = {};
// μμ£Όν μ μμ μ΄λ¦μ κ°μλ₯Ό `counts` λ³μμ λ΄κΈ°
for (name of completion) {
if (counts[name]) {
counts[name]++;
} else {
counts[name] = 1;
}
}
for (name of participant) {
if (counts[name]) {
counts[name]--; // μ μ μ΄λ¦μ΄ μμΌλ©΄ κ°μ 1 κ°μ
} else {
return name; // μ μ μ΄λ¦μ΄ μκ±°λ 0μ΄λ©΄ ν΄λΉ μ μμ μ΄λ¦μ λ°ν
}
}
}
μμ½λ© (CodeGolf)
μ‘°κΈ λ μ½λλ₯Ό κ°κ²°νκ² λ°κΎΈκΈ° μν΄ μ‘°κ±΄μ λΆλΆμ μμ ν΄ μλμ κ°μ΄ μ 리 κ°λ₯ν©λλ€.
function solution(participant, completion) {
const counts = {};
for (name of completion) counts[name] = (counts[name] | 0) + 1;
for (name of participant) if (!counts[name]--) return name;
}
:::help counts
μ name
μ΄ μμ μλ μλλ° !counts[name]--
μ΄ μ μ λλ‘ μλνλμ?
counts[name]
κ° λΉμ΄μμ κ²½μ° μ κ·Όνλ©΄undefined
λ₯Ό λ°νν©λλ€.undefined
κ° μ°μ μ°μ°μμ λ§λλ©΄ μ€λ₯ μμ΄NaN
μΌλ‘ λ°λκ² λ©λλ€.NaN
μ λ Όλ¦¬κ° κ±°μ§μΌλ‘ λ³νλκΈ° λλ¬Έμ,!NaN
μtrue
λ‘ λ³νλ©λλ€.
- λ°λΌμ
counts[name]
μ΄ μ‘΄μ¬νμ§ μμ λ,!counts[name]--
λtrue
μΌλ‘ λ³νλ©λλ€.
μ΄λ¬ν κ³Όμ μ ν΅ν΄ 맀νλ κ°μ΄ μλ κ²½μ°μλ μ μμ μ΄λ¦μ λ°ννλ λ‘μ§μ΄ μ μμ μΌλ‘ μλνκ² λ©λλ€.
:::
μΆκ°λ‘ counts
κ°μ²΄ μμ± λΌμΈμ μ κ±°νκ³ completion
λ°°μ΄μ ν΄μ¬λ§΅ μ©λλ‘ μ¬μ¬μ©ν©λλ€.
function solution(participant, completion) {
for (name of completion) completion[name] = (completion[name] | 0) + 1;
for (name of participant) if (!completion[name]--) return name;
}
:::help completion
λ λ°°μ΄μΈλ° μ΄λ»κ² ν€κ°μ μΈλ±μ€λ‘ μ¬μ© ν μ μλμ?
- μλ°μ€ν¬λ¦½νΈμμλ λ°°μ΄ λν
Array
λΌλ κ°μ²΄μ΄κΈ° λλ¬Έμ μμ±(property)μ μΆκ°ν μκ° μμ΅λλ€. - λ°λΌμ
completion[name]
μ΄λΌλ μ½λκ° μ μμ μΌλ‘ μλνκ² λ©λλ€.
:::
for-of
λ₯Ό map()
κ³Ό find()
λ©μλλ‘ λ°κΎΈκ³ νμ€μ μ½λλ‘ ν©μΉ©λλ€.
function solution(participant, completion) {
completion.map(name => (completion[name] = (completion[name] | 0) + 1));
return participant.find(name => !completion[name]--, completion);
}
solution = (participant, completion) =>
participant.find(
name => !completion[name]--,
completion.map(name => (completion[name] = (completion[name] | 0) + 1))
);
λ§μ§λ§μΌλ‘ κ°λ μ±μ ν¬κΈ°νκ³ λͺ¨λ μ΄λ¦μ νκΈμλ‘ μμ νλ©΄ μλμ κ°μ΄ μμ½λ© μ½λκ° μμ±λ©λλ€.
solution=(p,c)=>p.find(n=>!c[n]--,c.map(n=>(c[n]=(c[n]|0)+1)))