๋ฌธ์ ์ค๋ช
๋ฏผํธ๋ ๋ค๋จ๊ณ ์กฐ์ง์ ์ด์ฉํ์ฌ ์นซ์์ ํ๋งคํ๊ณ ์์ต๋๋ค. ํ๋งค์์ด ์นซ์์ ํ๋งคํ๋ฉด ๊ทธ ์ด์ต์ด ํผ๋ผ๋ฏธ๋ ์กฐ์ง์ ํ๊ณ ์กฐ๊ธ์ฉ ๋ถ๋ฐฐ๋๋ ํํ์ ํ๋งค๋ง์ ๋๋ค. ์ด๋์ ๋ ํ๋งค๊ฐ ์ด๋ฃจ์ด์ง ํ, ์กฐ์ง์ ์ด์ํ๋ ๋ฏผํธ๋ ์กฐ์ง ๋ด ๋๊ฐ ์ผ๋ง๋งํผ์ ์ด๋์ ๊ฐ์ ธ๊ฐ๋์ง๊ฐ ๊ถ๊ธํด์ก์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฏผํธ๊ฐ ์ด์ํ๊ณ ์๋ ๋ค๋จ๊ณ ์นซ์ ํ๋งค ์กฐ์ง์ด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค๊ณ ํฉ์๋ค.
๋ฏผํธ๋ center์ด๋ฉฐ, ํ๋์ ๋ค๋ชจ๋ ์ฌ๋ ๋ช ์ ํ๋งค์์ ํ์ํ ๊ฒ์ ๋๋ค. ๊ฐ๊ฐ์ ์์ ์ ์กฐ์ง์ ์ฐธ์ฌ์ํจ ์ถ์ฒ์ธ์ ์ฐ๊ฒฐ๋์ด ํผ๋ผ๋ฏธ๋ ์์ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๊ณ ์์ต๋๋ค. ์กฐ์ง์ ์ด์ต ๋ถ๋ฐฐ ๊ท์น์ ๊ฐ๋จํฉ๋๋ค. ๋ชจ๋ ํ๋งค์์ ์นซ์์ ํ๋งค์ ์ํ์ฌ ๋ฐ์ํ๋ ์ด์ต์์ 10% ๋ฅผ ๊ณ์ฐํ์ฌ ์์ ์ ์กฐ์ง์ ์ฐธ์ฌ์ํจ ์ถ์ฒ์ธ์๊ฒ ๋ฐฐ๋ถํ๊ณ ๋๋จธ์ง๋ ์์ ์ด ๊ฐ์ง๋๋ค. ๋ชจ๋ ํ๋งค์์ ์์ ์ด ์นซ์ ํ๋งค์์ ๋ฐ์ํ ์ด์ต ๋ฟ๋ง ์๋๋ผ, ์์ ์ด ์กฐ์ง์ ์ถ์ฒํ์ฌ ๊ฐ์ ์ํจ ํ๋งค์์๊ฒ์ ๋ฐ์ํ๋ ์ด์ต์ 10% ๊น์ง ์์ ์ ์ด์ต์ด ๋ฉ๋๋ค. ์์ ์๊ฒ ๋ฐ์ํ๋ ์ด์ต ๋ํ ๋ง์ฐฌ๊ฐ์ง์ ๊ท์น์ผ๋ก ์์ ์ ์ถ์ฒ์ธ์๊ฒ ๋ถ๋ฐฐ๋ฉ๋๋ค. ๋จ, 10% ๋ฅผ ๊ณ์ฐํ ๋์๋ ์ ๋จ์์์ ์ ์ฌํ๋ฉฐ, 10%๋ฅผ ๊ณ์ฐํ ๊ธ์ก์ด 1 ์ ๋ฏธ๋ง์ธ ๊ฒฝ์ฐ์๋ ์ด๋์ ๋ถ๋ฐฐํ์ง ์๊ณ ์์ ์ด ๋ชจ๋ ๊ฐ์ง๋๋ค.
์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ ํ๋งค ๊ธฐ๋ก์ด ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ์นซ์์ ํ๋งค์์ ๋ฐ์ํ๋ ์ด์ต์ ๊ฐ๋น 100 ์์ผ๋ก ์ ํด์ ธ ์์ต๋๋ค.
ํ๋งค์ | ํ๋งค ์๋ | ์ด์ต๊ธ |
---|---|---|
young | 12 | 1,200 ์ |
john | 4 | 400 ์ |
tod | 2 | 200 ์ |
emily | 5 | 500 ์ |
mary | 10 | 1,000 ์ |
ํ๋งค์ young ์ ์ํ์ฌ 1,200 ์์ ์ด์ต์ด ๋ฐ์ํ์ต๋๋ค. young ์ ์ด ์ค 10% ์ ํด๋นํ๋ 120 ์์, ์์ ์ ์กฐ์ง์ ์ฐธ์ฌ์ํจ ์ถ์ฒ์ธ์ธ edward ์๊ฒ ๋ฐฐ๋ถํ๊ณ ์์ ์ ๋๋จธ์ง์ธ 1,080 ์์ ๊ฐ์ง๋๋ค. edward ๋ young ์๊ฒ์ ๋ฐ์ 120 ์ ์ค 10% ์ธ 12 ์์ mary ์๊ฒ ๋ฐฐ๋ถํ๊ณ ์์ ์ ๋๋จธ์ง์ธ 108 ์์ ๊ฐ์ง๋๋ค. 12 ์์ edward ๋ก๋ถํฐ ๋ฐ์ mary ๋ 10% ์ธ 1 ์์ ์ผํฐ์ (์ฆ, ๋ฏผํธ์๊ฒ) ๋ฐฐ๋ถํ๊ณ ์์ ์ ๋๋จธ์ง์ธ 11 ์์ ๊ฐ์ง๋๋ค. ์ด ์ํ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
๊ทธ ํ, ํ๋งค์ john ์ ์ํ์ฌ 400 ์์ ์ด์ต์ด ๋ฐ์ํฉ๋๋ค. john ์ 10% ์ธ 40 ์์ ์ผํฐ์ ๋ฐฐ๋ถํ๊ณ ์์ ์ด ๋๋จธ์ง์ธ 360 ์์ ๊ฐ์ง๋๋ค. ์ด ์ํ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
๋ ๊ทธ ํ์๋ ํ๋งค์ tod ์ ์ํ์ฌ 200 ์ ์ด์ต์ด ๋ฐ์ํ๋๋ฐ, tod ์์ ์ด 180 ์์, ์ถ์ฒ์ธ์ธ jaimie ๊ฐ ๊ทธ ์ค 10% ์ธ 20 ์์ ๋ฐ์์ 18 ์์ ๊ฐ์ง๊ณ , jaimie ์ ์ถ์ฒ์ธ์ธ mary ๋ 2 ์์ ๋ฐ์ง๋ง ์ด๊ฒ์ 10% ๋ ์ ๋จ์์์ ์ ์ฌํ๋ฉด ๋ฐฐ๋ถํ ๊ธ์ก์ด ์๊ธฐ ๋๋ฌธ์ mary ๋ 2 ์์ ๋ชจ๋ ๊ฐ์ง๋๋ค. ์ด ์ํ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
๊ทธ ๋ค์์ผ๋ก emily ๊ฐ ์นซ์ ํ๋งค๋ฅผ ํตํ์ฌ ์ป์ ์ด์ต 500 ์์ ๋ง์ฐฌ๊ฐ์ง์ ๊ท์น์ ๋ฐ๋ผ emily ์๊ฒ 450 ์, mary ์๊ฒ 45 ์, ๊ทธ๋ฆฌ๊ณ ์ผํฐ์ 5 ์์ผ๋ก ๋ถ๋ฐฐ๋ฉ๋๋ค. ์ด ์ํ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก, ํ๋งค์ mary ๋ 1,000 ์์ ์ด์ต์ ๋ฌ์ฑํ๊ณ , ์ด ์ค 10% ์ธ 100 ์์ ์ผํฐ์ ๋ฐฐ๋ถํ ํ ๊ทธ ๋๋จธ์ง์ธ 900 ์์ ์์ ์ด ๊ฐ์ง๋๋ค. ์ด ์ํ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
์์ ๊ฐ์ด ํ์ฌ ๋ชจ๋ ์กฐ์ง ๊ตฌ์ฑ์๋ค์ ์ด์ต ๋ฌ์ฑ ํํฉ ์ง๊ณ๊ฐ ๋๋ฌ์ต๋๋ค. ์ง๊ธ๊น์ง ์ป์ ์ด์ต์ ๋ชจ๋ ํฉํ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
์ด ๊ฒฐ๊ณผ๊ฐ ๋ฏผํธ๊ฐ ํ์ ํ๊ณ ์ ํ๋ ์ด์ต ๋ฐฐ๋ถ ํํฉ์ ๋๋ค.
๊ฐ ํ๋งค์์ ์ด๋ฆ์ ๋ด์ ๋ฐฐ์ด enroll, ๊ฐ ํ๋งค์์ ๋ค๋จ๊ณ ์กฐ์ง์ ์ฐธ์ฌ์ํจ ๋ค๋ฅธ ํ๋งค์์ ์ด๋ฆ์ ๋ด์ ๋ฐฐ์ด referral, ํ๋งค๋ ์ง๊ณ ๋ฐ์ดํฐ์ ํ๋งค์ ์ด๋ฆ์ ๋์ดํ ๋ฐฐ์ด seller, ํ๋งค๋ ์ง๊ณ ๋ฐ์ดํฐ์ ํ๋งค ์๋์ ๋์ดํ ๋ฐฐ์ด amount๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฐ ํ๋งค์์ด ๋ํ ์ด์ต๊ธ์ ๋์ดํ ๋ฐฐ์ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ํ๋งค์์๊ฒ ๋ฐฐ๋ถ๋ ์ด์ต๊ธ์ ์ดํฉ์ ๊ณ์ฐํ์ฌ(์ ์ํ์ผ๋ก), ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง enroll์ ์ด๋ฆ์ด ํฌํจ๋ ์์์ ๋ฐ๋ผ ๋์ดํ๋ฉด ๋ฉ๋๋ค.
์ ํ์ฌํญ
์ ์ถ๋ ฅ ์
enroll | referral | seller | amount | result |
---|---|---|---|---|
["john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"] | ["-", "-", "mary", "edward", "mary", "mary", "jaimie", "edward"] | ["young", "john", "tod", "emily", "mary"] | [12, 4, 2, 5, 10] | [360, 958, 108, 0, 450, 18, 180, 1080] |
["john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"] | ["-", "-", "mary", "edward", "mary", "mary", "jaimie", "edward"] | ["sam", "emily", "jaimie", "edward"] | [2, 3, 5, 4] | [0, 110, 378, 180, 270, 450, 0, 0] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
๋ฌธ์ ์ ์์์ ๊ฐ์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
๋ฌธ์ ์ ์ฃผ์ด์ง ์์์ ๋์ผํ ์กฐ์ง ๊ตฌ์ฑ์ ์กฐ๊ธ ๋ค๋ฅธ ํ๋งค๋ ์ง๊ณ๋ฅผ ์ ์ฉํ ๊ฒ์ ๋๋ค. ์ด์ต์ ๋ถ๋ฐฐํ๋ ๊ท์น์ด ๋์ผํ๋ฏ๋ก, ๊ฐ๋จํ ๊ณ์ฐ์ ์ํ์ฌ ํ์ ๋ณด์ธ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
โป ๊ณต์ง - 2021๋ 5์ 21์ผ ํ ์คํธ์ผ์ด์ค๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
๋์ ํ์ด
function solution(enroll, referral, seller, amount) {
// ์ถ์ฒ ๋ฐ์ ์ฌ๋์ key, ํด์ค ์ฌ๋์ value ์ ๋ด์ ๊ฐ์ฒด ์์ฑ
const line = {}
// ๊ฒฐ๊ณผ๋ฅผ ๋ด์ array
const result = Array.from({length:enroll.length}, () => 0)
enroll.forEach((en,eIdx) => {
if(referral[eIdx] !== '-') {
line[en] = referral[eIdx]
} else {
line[en] = ''
}
})
// ํ๋งค ํ ์ฌ๋์ ๋ชจ๋ ์ํ
seller.forEach((sel,sIdx) => {
dfs(sel,amount[sIdx]*100)
})
// DFS
function dfs(sel,cost) {
// ์ ๋ฌํ ๋
const val = Math.floor(cost*0.1)
// ์ ๋ฌ ํ๋ ค๋ ๊ฐ์ด 1๋ณด๋ค ๋ฎ์ ๊ฒฝ์ฐ ์ ๋ฌํ ํ์ ์์ด ๋ถํ์ํ ํธ์ถ์คํ์ด ์์ด๋ฏ๋ก ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ์ง ์๋๋ค๋ฉด ํจ์จ์ฑ ํ
์คํธ์์ ํต๊ณผํ์ง ๋ชปํจ
if(line[sel] && val > 0) {
dfs(line[sel], val)
}
// ์ ๋ต ๋ฐฐ์ด์ ์ ๋ฌํ ๊ธ์ก์ ์ ์ธํ ์์ต์ ๋ํจ
result[enroll.indexOf(sel)]+=cost-val
}
return result
}
์ฌ๊ท๋ฅผ์จ์ ๊ณ์ ๋๋ ์ฃผ๋๊ฑด๊ฐ 10ํผ๋งํผ??