์ฒ ์๋ ๋กค์ผ์ดํฌ๋ฅผ ๋ ์กฐ๊ฐ์ผ๋ก ์๋ผ์ ๋์๊ณผ ํ ์กฐ๊ฐ์ฉ ๋๋ ๋จน์ผ๋ ค๊ณ ํฉ๋๋ค. ์ด ๋กค์ผ์ดํฌ์๋ ์ฌ๋ฌ๊ฐ์ง ํ ํ๋ค์ด ์ผ๋ ฌ๋ก ์ฌ๋ ค์ ธ ์์ต๋๋ค. ์ฒ ์์ ๋์์ ๋กค์ผ์ดํฌ๋ฅผ ๊ณตํํ๊ฒ ๋๋ ๋จน์ผ๋ ค ํ๋๋ฐ, ๊ทธ๋ค์ ๋กค์ผ์ดํฌ์ ํฌ๊ธฐ๋ณด๋ค ๋กค์ผ์ดํฌ ์์ ์ฌ๋ ค์ง ํ ํ๋ค์ ์ข ๋ฅ์ ๋ ๊ด์ฌ์ด ๋ง์ต๋๋ค. ๊ทธ๋์ ์๋ฆฐ ์กฐ๊ฐ๋ค์ ํฌ๊ธฐ์ ์ฌ๋ ค์ง ํ ํ์ ๊ฐ์์ ์๊ด์์ด ๊ฐ ์กฐ๊ฐ์ ๋์ผํ ๊ฐ์ง์์ ํ ํ์ด ์ฌ๋ผ๊ฐ๋ฉด ๊ณตํํ๊ฒ ๋กค์ผ์ดํฌ๊ฐ ๋๋์ด์ง ๊ฒ์ผ๋ก ์๊ฐํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋กค์ผ์ดํฌ์ 4๊ฐ์ง ์ข ๋ฅ์ ํ ํ์ด ์ฌ๋ ค์ ธ ์๋ค๊ณ ํฉ์๋ค. ํ ํ๋ค์ 1, 2, 3, 4์ ๊ฐ์ด ๋ฒํธ๋ก ํ์ํ์ ๋, ์ผ์ดํฌ ์์ ํ ํ๋ค์ด [1, 2, 1, 3, 1, 4, 1, 2] ์์๋ก ์ฌ๋ ค์ ธ ์์ต๋๋ค. ๋ง์ฝ ์ธ ๋ฒ์งธ ํ ํ(1)๊ณผ ๋ค ๋ฒ์งธ ํ ํ(3) ์ฌ์ด๋ฅผ ์๋ฅด๋ฉด ๋กค์ผ์ดํฌ์ ํ ํ์ [1, 2, 1], [3, 1, 4, 1, 2]๋ก ๋๋๊ฒ ๋ฉ๋๋ค. ์ฒ ์๊ฐ [1, 2, 1]์ด ๋์ธ ์กฐ๊ฐ์, ๋์์ด [3, 1, 4, 1, 2]๊ฐ ๋์ธ ์กฐ๊ฐ์ ๋จน๊ฒ ๋๋ฉด ์ฒ ์๋ ๋ ๊ฐ์ง ํ ํ(1, 2)์ ๋ง๋ณผ ์ ์์ง๋ง, ๋์์ ๋ค ๊ฐ์ง ํ ํ(1, 2, 3, 4)์ ๋ง๋ณผ ์ ์์ผ๋ฏ๋ก, ์ด๋ ๊ณตํํ๊ฒ ๋๋์ด์ง ๊ฒ์ด ์๋๋๋ค. ๋ง์ฝ ๋กค์ผ์ดํฌ์ ๋ค ๋ฒ์งธ ํ ํ(3)๊ณผ ๋ค์ฏ ๋ฒ์งธ ํ ํ(1) ์ฌ์ด๋ฅผ ์๋ฅด๋ฉด [1, 2, 1, 3], [1, 4, 1, 2]๋ก ๋๋๊ฒ ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฒ ์๋ ์ธ ๊ฐ์ง ํ ํ(1, 2, 3)์, ๋์๋ ์ธ ๊ฐ์ง ํ ํ(1, 2, 4)์ ๋ง๋ณผ ์ ์์ผ๋ฏ๋ก, ์ด๋ ๊ณตํํ๊ฒ ๋๋์ด์ง ๊ฒ์ ๋๋ค. ๊ณตํํ๊ฒ ๋กค์ผ์ดํฌ๋ฅผ ์๋ฅด๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง ์ผ ์ ์์ต๋๋ค. ์์ ๋กค์ผ์ดํฌ๋ฅผ [1, 2, 1, 3, 1], [4, 1, 2]์ผ๋ก ์๋ผ๋ ๊ณตํํ๊ฒ ๋๋ฉ๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ๋กค์ผ์ดํฌ๋ฅผ ๊ณตํํ๊ฒ ๋๋์ง ๋ชปํ ์๋ ์์ต๋๋ค.
๋กค์ผ์ดํฌ์ ์ฌ๋ ค์ง ํ ํ๋ค์ ๋ฒํธ๋ฅผ ์ ์ฅํ ์ ์ ๋ฐฐ์ด topping
์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋กค์ผ์ดํฌ๋ฅผ ๊ณตํํ๊ฒ ์๋ฅด๋ ๋ฐฉ๋ฒ์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
topping
์ ๊ธธ์ด โค 1,000,000topping
์ ์์ โค 10,000topping | result |
---|---|
[1, 2, 1, 3, 1, 4, 1, 2] | 2 |
[1, 2, 3, 1, 4] | 0 |
์ ์ถ๋ ฅ ์ #1
์ ์ถ๋ ฅ ์ #2
function solution(topping) {
// ํ ํ ๊ฐ์ง ์ ๋ฐ ์ธ๋ฑ์ค ์๋ฅผ ์ ์ฅํ ๋ฐฐ์ด ์์ฑ
const [bro1Set, bro1Arr, bro2Set, bro2Arr] = [new Set(), [], new Set(), []]
// ํ ํ ์ํ
topping.forEach((top, i) => {
// ๋์์๊ฒ ํ ํ ๋ถ์ฌ
bro1Set.add(top)
// ํ์ ์ธ๋ฑ์ค๊ฐ 0์ธ๊ฒฝ์ฐ // at(-1) === at(0) ์ด๋ฏ๋ก ์๋ต
if(i !== 0) {
bro2Set.add(topping.at(-i))
}
// ํ ํ ๊ฐ์ง์ ์ ์ฅ
bro1Arr.push(bro1Set.size)
bro2Arr.push(bro2Set.size)
})
// ํ ํ ๊ฐ์ง์๊ฐ ๊ฐ๋ค๋ฉด result+1
return bro1Arr.reduce((acc,cur,i) =>
cur === bro2Arr.at(-i-1) ? acc+1 : acc, 0)
}