๐ ํ๋ก๊ทธ๋๋จธ์ค 152995 : ์ธ์ฌ๊ณ ๊ณผ - Javascript
2023-02-02
๋ฌธ์ ์ค๋ช
์ํธ๋ค ํ์ฌ๋ ์ฐ๋ง๋ง๋ค 1๋ ๊ฐ์ ์ธ์ฌ๊ณ ๊ณผ์ ๋ฐ๋ผ ์ธ์ผํฐ๋ธ๋ฅผ ์ง๊ธํฉ๋๋ค. ๊ฐ ์ฌ์๋ง๋ค ๊ทผ๋ฌด ํ๋ ์ ์์ ๋๋ฃ ํ๊ฐ ์ ์๊ฐ ๊ธฐ๋ก๋์ด ์๋๋ฐ ๋ง์ฝ ์ด๋ค ์ฌ์์ด ๋ค๋ฅธ ์์์ ์ฌ์๋ณด๋ค ๋ ์ ์๊ฐ ๋ชจ๋ ๋ฎ์ ๊ฒฝ์ฐ๊ฐ ํ ๋ฒ์ด๋ผ๋ ์๋ค๋ฉด ๊ทธ ์ฌ์์ ์ธ์ผํฐ๋ธ๋ฅผ ๋ฐ์ง ๋ชปํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ์ฌ์๋ค์ ๋ํด์๋ ๋ ์ ์์ ํฉ์ด ๋์ ์์ผ๋ก ์์ฐจ๋ฅผ ๋ด์ด ์์ฐจ์ ๋ฐ๋ผ ์ธ์ผํฐ๋ธ๊ฐ ์ฐจ๋ฑ ์ง๊ธ๋ฉ๋๋ค.
์ด๋, ๋ ์ ์์ ํฉ์ด ๋์ผํ ์ฌ์๋ค์ ๋์์ฐจ์ด๋ฉฐ, ๋์์ฐจ์ ์๋งํผ ๋ค์ ์์ฐจ๋ ๊ฑด๋ ๋๋๋ค. ์๋ฅผ ๋ค์ด ์ ์์ ํฉ์ด ๊ฐ์ฅ ํฐ ์ฌ์์ด 2๋ช ์ด๋ผ๋ฉด 1๋ฑ์ด 2๋ช ์ด๊ณ 2๋ฑ ์์ด ๋ค์ ์์ฐจ๋ 3๋ฑ๋ถํฐ์ ๋๋ค.
๊ฐ ์ฌ์์ ๊ทผ๋ฌด ํ๋ ์ ์์ ๋๋ฃ ํ๊ฐ ์ ์ ๋ชฉ๋ก scores์ด ์ฃผ์ด์ก์ ๋, ์ํธ์ ์์ฐจ๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- 1 โค
scores
์ ๊ธธ์ด โค 100,000 scores
์ ๊ฐ ํ์ ํ ์ฌ์์ ๊ทผ๋ฌด ํ๋ ์ ์์ ๋๋ฃ ํ๊ฐ ์ ์๋ฅผ ๋ํ๋ด๋ฉฐ [a, b] ํํ์ ๋๋ค.scores
[0]์ ์ํธ์ ์ ์์ ๋๋ค.- 0 โค a, b โค 100,000
- ์ํธ๊ฐ ์ธ์ผํฐ๋ธ๋ฅผ ๋ฐ์ง ๋ชปํ๋ ๊ฒฝ์ฐ -1์ return ํฉ๋๋ค.
์ ์ถ๋ ฅ ์
scores | result |
---|---|
[[2,2],[1,4],[3,2],[3,2],[2,1]] | 4 |
5 ๋ฒ์งธ ์ฌ์์ 3 ๋ฒ์งธ ๋๋ 4 ๋ฒ์งธ ์ฌ์๋ณด๋ค ๊ทผ๋ฌด ํ๋ ์ ์์ ๋๋ฃ ํ๊ฐ ์ ์๊ฐ ๋ชจ๋ ๋ฎ๊ธฐ ๋๋ฌธ์ ์ธ์ผํฐ๋ธ๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
2 ๋ฒ์งธ ์ฌ์, 3 ๋ฒ์งธ ์ฌ์, 4 ๋ฒ์งธ ์ฌ์์ ๋ ์ ์์ ํฉ์ด 5 ์ ์ผ๋ก ์ต๊ณ ์ ์ด๋ฏ๋ก 1 ๋ฑ์ ๋๋ค.
1 ๋ฑ์ด ์ธ ๋ช ์ด๋ฏ๋ก 2 ๋ฑ๊ณผ 3 ๋ฑ์ ์๊ณ 1 ๋ฒ์งธ ์ฌ์์ธ ์ํธ๋ ๋ ์ ์์ ํฉ์ด 4 ์ ์ผ๋ก 4 ๋ฑ์ ๋๋ค.
ํ์ด ๊ณผ์
์ ์ฒด ์ ์(participant) ์ค ์์ฃผํ ์ ์(completion) ๋ชฉ๋ก์ ์กด์ฌํ์ง ์๋ ์ ์ ํ ๋ช ์ ์ฐพ์๋ด์ผ ํฉ๋๋ค.
์๋ 1
splice
์ indexOf
๋ฅผ ์ด์ฉํด ์์ฃผํ ์ ์(completion)๋ฅผ ์ ์ฒด ์ ์(participant)์์ ํ๋์ฉ ์๊ฑฐํ ๋ค, ๋จ์ ํ ์ ์์ ์ด๋ฆ์ ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก ํ์ด๋ดค์ต๋๋ค.
function solution(scores) {
const len = scores.length;
for(let i = 1; i < len; ++i){
if(scores[0][1] < scores[i][0] && scores[0][1] < scores[i][1]){
return -1;
}
}
const totalScores = scores.map([a,b] => a + b);
}
ํ์ง๋ง ์ ํ๋ ํ
์คํธ๋ ํต๊ณผํ๊ณ ์๊ฐ ์ด๊ณผ๋ก ํจ์จ์ฑ ํ
์คํธ๋ ํต๊ณผํ์ง ๋ชปํ์ต๋๋ค. ๋ฐฐ์ด์ ์์ ํ๋ 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;
}
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;
}
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))
);