์์ฌ๋ ํ๋ฐฐ์์๋ฅผ ํธ๋ญ์ ์ฃ๋ ์ผ์ ํฉ๋๋ค. ์์ฌ๊ฐ ์ค์ด์ผ ํ๋ ํ๋ฐฐ์์๋ ํฌ๊ธฐ๊ฐ ๋ชจ๋ ๊ฐ์ผ๋ฉฐ 1๋ฒ ์์๋ถํฐ n๋ฒ ์์๊น์ง ๋ฒํธ๊ฐ ์ฆ๊ฐํ๋ ์์๋๋ก ์ปจํ ์ด๋ ๋ฒจํธ์ ์ผ๋ ฌ๋ก ๋์ฌ ์์ฌ์๊ฒ ์ ๋ฌ๋ฉ๋๋ค. ์ปจํ ์ด๋ ๋ฒจํธ๋ ํ ๋ฐฉํฅ์ผ๋ก๋ง ์งํ์ด ๊ฐ๋ฅํด์ ๋ฒจํธ์ ๋์ธ ์์๋๋ก(1๋ฒ ์์๋ถํฐ) ์์๋ฅผ ๋ด๋ฆด ์ ์์ต๋๋ค. ํ์ง๋ง ์ปจํ ์ด๋ ๋ฒจํธ์ ๋์ธ ์์๋๋ก ํ๋ฐฐ์์๋ฅผ ๋ด๋ ค ๋ฐ๋ก ํธ๋ญ์ ์ฃ๊ฒ ๋๋ฉด ํ๋ฐฐ ๊ธฐ์ฌ๋์ด ๋ฐฐ๋ฌํ๋ ์์์ ํ๋ฐฐ์์๊ฐ ์ค๋ ค ์๋ ์์๊ฐ ๋ง์ง ์์ ๋ฐฐ๋ฌ์ ์ฐจ์ง์ด ์๊น๋๋ค. ๋ฐ๋ผ์ ํ๋ฐฐ ๊ธฐ์ฌ๋์ด ๋ฏธ๋ฆฌ ์๋ ค์ค ์์์ ๋ง๊ฒ ์์ฌ๊ฐ ํ๋ฐฐ์์๋ฅผ ์ค์ด์ผ ํฉ๋๋ค.
๋ง์ฝ ์ปจํ ์ด๋ ๋ฒจํธ์ ๋งจ ์์ ๋์ธ ์์๊ฐ ํ์ฌ ํธ๋ญ์ ์ค์ด์ผ ํ๋ ์์๊ฐ ์๋๋ผ๋ฉด ๊ทธ ์์๋ฅผ ํธ๋ญ์ ์ค์ ์์๊ฐ ๋ ๋๊น์ง ์ ์ ๋ค๋ฅธ ๊ณณ์ ๋ณด๊ดํด์ผ ํฉ๋๋ค. ํ์ง๋ง ๊ณ ๊ฐ์ ๋ฌผ๊ฑด์ ํจ๋ถ๋ก ๋ ์ ๋ ์ ์์ด ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ๋ฅผ ์ถ๊ฐ๋ก ์ค์นํ์์ต๋๋ค. ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ๋ ์ ๋ค๋ก ์ด๋์ด ๊ฐ๋ฅํ์ง๋ง ์ ๊ตฌ ์ธ์ ๋ค๋ฅธ ๋ฉด์ด ๋งํ ์์ด์ ๋งจ ์์ ์์๋ง ๋บ ์ ์์ต๋๋ค(์ฆ, ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ์ ๋ณด๊ดํ ์์๋ถํฐ ๊บผ๋ด๊ฒ ๋ฉ๋๋ค). ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ๋ฅผ ์ด์ฉํด๋ ๊ธฐ์ฌ๋์ด ์ํ๋ ์์๋๋ก ์์๋ฅผ ์ฃ์ง ๋ชป ํ๋ค๋ฉด, ๋ ์ด์ ์์๋ฅผ ์ฃ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์์ฌ๊ฐ 5๊ฐ์ ์์๋ฅผ ์ค์ด์ผ ํ๋ฉฐ, ํ๋ฐฐ ๊ธฐ์ฌ๋์ด ์๋ ค์ค ์์๊ฐ ๊ธฐ์กด์ ์ปจํ ์ด๋ ๋ฒจํธ์ ๋ค ๋ฒ์งธ, ์ธ ๋ฒ์งธ, ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ๋ค์ฏ ๋ฒ์งธ ๋์ธ ํ๋ฐฐ์์ ์์์ธ ๊ฒฝ์ฐ, ์์ฌ๋ ์ฐ์ ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ์ธ ๋ฒ์งธ ์์๋ฅผ ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ์ ๋ณด๊ดํฉ๋๋ค. ๊ทธ ํ ๋ค ๋ฒ์งธ ์์๋ฅผ ํธ๋ญ์ ์ฃ๊ณ ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ์์ ์ธ ๋ฒ์งธ ์์ ๋นผ์ ํธ๋ญ์์ฃ์ต๋๋ค. ๋ค์์ผ๋ก ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ค์ด์ผ ํ์ง๋ง ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ์์๋ ๋ ๋ฒ์งธ ์์๋ฅผ, ๊ธฐ์กด์ ์ปจํ ์ด๋ ๋ฒจํธ์๋ ๋ค์ฏ ๋ฒ์งธ ์์๋ฅผ ๊บผ๋ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋์ด์์ ์์๋ ์ค์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํธ๋ญ์๋ 2๊ฐ์ ์์๋ง ์ค๋ฆฌ๊ฒ ๋ฉ๋๋ค.
ํ๋ฐฐ ๊ธฐ์ฌ๋์ด ์ํ๋ ์์ ์์๋ฅผ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด order
๊ฐ ์ฃผ์ด์ก์ ๋, ์์ฌ๊ฐ ๋ช ๊ฐ์ ์์๋ฅผ ์ค์ ์ ์๋์ง return ํ๋ solution ํจ์๋ฅผ ์์ฑํ์ธ์.
order
์ ๊ธธ์ด โค 1,000,000order
๋ 1์ด์ order์ ๊ธธ์ด ์ดํ์ ๋ชจ๋ ์ ์๊ฐ ํ๋ฒ์ฉ ๋ฑ์ฅํฉ๋๋ค.order[i]
๋ ๊ธฐ์กด์ ์ปจํ
์ด๋ ๋ฒจํธ์ order[i]
๋ฒ์งธ ์์๋ฅผ i+1๋ฒ์งธ๋ก ํธ๋ญ์ ์ค์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.order | result |
---|---|
[4, 3, 1, 2, 5] | 2 |
[5, 4, 3, 2, 1] | 5 |
์ ์ถ๋ ฅ ์ #1
์ ์ถ๋ ฅ ์ #2
๊ธฐ์กด์ ํ์ด ๋ฐฉ์๋๋ก ํ์์ ๋, ์๊ฐ ์ด๊ณผ๊ฐ ๋ ๊ต์ฅํ ๋นํฉ์ค๋ฌ์ ๋ค..
function solution(order) {
// ์ค์ ์ ์๋ ์์์ ๊ฐ์
let putBoxCount = 0
// ๊ธฐ๋ณธ ์ปจํ
์ด๋
const baseContainer = Array(order.length).fill(0).map((_,i) => i+1)
// ๋ณด์กฐ ์ปจํ
์ด๋
const subContainer = []
// ์ํํ๋ฉฐ ์ค์ ์ ์๋ ์์์ ๊ฐ์ ์กฐํ
while(baseContainer.length || subContainer.length) {
// ์ฃผ๋ฌธ์ด ์์์ ๊ฐ๋ค๋ฉด ์ค์ ์ ์๋ ์์์ ๊ฐ์ +1
if(order[0] === baseContainer[0]) {
putBoxCount++
order.shift()
baseContainer.shift()
// ๋ณด์กฐ ์ฝํ
์ด๋ ๋ฌผ๊ฑด๊ณผ ์ฃผ๋ฌธ ์์๊ฐ ๊ฐ๋ค๋ฉด
} else if (order[0] === subContainer[0]) {
putBoxCount++
order.shift()
subContainer.shift()
// ์ฃผ๋ฌธ ์์๊ฐ ๋ค๋ฅด๋ค๋ฉด ๋ณด์กฐ ์ปจํ
์ด๋์ ๋ณด๊ด
} else {
// ๋ฌผ๋์ด ๋ค ๋น ์ง ์ํ๋ผ๋ฉด break
if(baseContainer[0] === undefined) break
subContainer.unshift(baseContainer.shift())
}
}
return putBoxCount
}
๊ฒฐ๊ตญ ๊ธฐ์กด ๋ฐฐ์ด์ ๋ค์ง์ด(reverse) unshift
, shift
๋ณด๋ค๋ push
, pop
์ ์ฌ์ฉํ๋๋ ํจ์จ์ด ํฌ๊ฒ ํฅ์๋์์
function solution(order) {
// ์ฃผ๋ฌธ๋ ๋ค์ง์ (push, pop์ด unshift, shift๋ณด๋ค ์ฐ์ฐ์๋์ ๋น ๋ฅด๊ธฐ ๋๋ฌธ)
order = order.reverse()
// ์ค์ ์ ์๋ ์์์ ๊ฐ์
let putBoxCount = 0
// ๊ธฐ๋ณธ ์ปจํ
์ด๋
const baseContainer = Array(order.length).fill(0).map((_,i) => i+1).reverse()
// ๋ณด์กฐ ์ปจํ
์ด๋
const subContainer = []
// ์ํํ๋ฉฐ ์ค์ ์ ์๋ ์์์ ๊ฐ์ ์กฐํ
while(baseContainer.length || subContainer.length) {
// ์ฃผ๋ฌธ์ด ์์์ ๊ฐ๋ค๋ฉด ์ค์ ์ ์๋ ์์์ ๊ฐ์ +1
if(order.at(-1) === baseContainer.at(-1)) {
putBoxCount++
order.pop()
baseContainer.pop()
// ๋ณด์กฐ ์ฝํ
์ด๋ ๋ฌผ๊ฑด๊ณผ ์ฃผ๋ฌธ ์์๊ฐ ๊ฐ๋ค๋ฉด
} else if (order.at(-1) === subContainer.at(-1)) {
putBoxCount++
order.pop()
subContainer.pop()
// ์ฃผ๋ฌธ ์์๊ฐ ๋ค๋ฅด๋ค๋ฉด ๋ณด์กฐ ์ปจํ
์ด๋์ ๋ณด๊ด
} else {
// ๋ฌผ๋์ด ๋ค ๋น ์ง ์ํ๋ผ๋ฉด break
if(baseContainer.length === 0) break
subContainer.push(baseContainer.pop())
}
}
return putBoxCount
}