๐Ÿงก๋ฌธ์ œ ์„ค๋ช…

์˜์žฌ๋Š” ํƒ๋ฐฐ์ƒ์ž๋ฅผ ํŠธ๋Ÿญ์— ์‹ฃ๋Š” ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค. ์˜์žฌ๊ฐ€ ์‹ค์–ด์•ผ ํ•˜๋Š” ํƒ๋ฐฐ์ƒ์ž๋Š” ํฌ๊ธฐ๊ฐ€ ๋ชจ๋‘ ๊ฐ™์œผ๋ฉฐ 1๋ฒˆ ์ƒ์ž๋ถ€ํ„ฐ n๋ฒˆ ์ƒ์ž๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ์ผ๋ ฌ๋กœ ๋†“์—ฌ ์˜์žฌ์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ๋Š” ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ง„ํ–‰์ด ๊ฐ€๋Šฅํ•ด์„œ ๋ฒจํŠธ์— ๋†“์ธ ์ˆœ์„œ๋Œ€๋กœ(1๋ฒˆ ์ƒ์ž๋ถ€ํ„ฐ) ์ƒ์ž๋ฅผ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ๋†“์ธ ์ˆœ์„œ๋Œ€๋กœ ํƒ๋ฐฐ์ƒ์ž๋ฅผ ๋‚ด๋ ค ๋ฐ”๋กœ ํŠธ๋Ÿญ์— ์‹ฃ๊ฒŒ ๋˜๋ฉด ํƒ๋ฐฐ ๊ธฐ์‚ฌ๋‹˜์ด ๋ฐฐ๋‹ฌํ•˜๋Š” ์ˆœ์„œ์™€ ํƒ๋ฐฐ์ƒ์ž๊ฐ€ ์‹ค๋ ค ์žˆ๋Š” ์ˆœ์„œ๊ฐ€ ๋งž์ง€ ์•Š์•„ ๋ฐฐ๋‹ฌ์— ์ฐจ์งˆ์ด ์ƒ๊น๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํƒ๋ฐฐ ๊ธฐ์‚ฌ๋‹˜์ด ๋ฏธ๋ฆฌ ์•Œ๋ ค์ค€ ์ˆœ์„œ์— ๋งž๊ฒŒ ์˜์žฌ๊ฐ€ ํƒ๋ฐฐ์ƒ์ž๋ฅผ ์‹ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์˜ ๋งจ ์•ž์— ๋†“์ธ ์ƒ์ž๊ฐ€ ํ˜„์žฌ ํŠธ๋Ÿญ์— ์‹ค์–ด์•ผ ํ•˜๋Š” ์ˆœ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ ์ƒ์ž๋ฅผ ํŠธ๋Ÿญ์— ์‹ค์„ ์ˆœ์„œ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ์ž ์‹œ ๋‹ค๋ฅธ ๊ณณ์— ๋ณด๊ด€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณ ๊ฐ์˜ ๋ฌผ๊ฑด์„ ํ•จ๋ถ€๋กœ ๋•…์— ๋‘˜ ์ˆ˜ ์—†์–ด ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ๋ฅผ ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ๋Š” ์•ž ๋’ค๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ž…๊ตฌ ์™ธ์— ๋‹ค๋ฅธ ๋ฉด์ด ๋ง‰ํ˜€ ์žˆ์–ด์„œ ๋งจ ์•ž์˜ ์ƒ์ž๋งŒ ๋บ„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ๋ณด๊ด€ํ•œ ์ƒ์ž๋ถ€ํ„ฐ ๊บผ๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค). ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ๋ฅผ ์ด์šฉํ•ด๋„ ๊ธฐ์‚ฌ๋‹˜์ด ์›ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ƒ์ž๋ฅผ ์‹ฃ์ง€ ๋ชป ํ•œ๋‹ค๋ฉด, ๋” ์ด์ƒ ์ƒ์ž๋ฅผ ์‹ฃ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์˜์žฌ๊ฐ€ 5๊ฐœ์˜ ์ƒ์ž๋ฅผ ์‹ค์–ด์•ผ ํ•˜๋ฉฐ, ํƒ๋ฐฐ ๊ธฐ์‚ฌ๋‹˜์ด ์•Œ๋ ค์ค€ ์ˆœ์„œ๊ฐ€ ๊ธฐ์กด์˜ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ๋„ค ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ, ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ๋‹ค์„ฏ ๋ฒˆ์งธ ๋†“์ธ ํƒ๋ฐฐ์ƒ์ž ์ˆœ์„œ์ธ ๊ฒฝ์šฐ, ์˜์žฌ๋Š” ์šฐ์„  ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ ์ƒ์ž๋ฅผ ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„ ๋„ค ๋ฒˆ์งธ ์ƒ์ž๋ฅผ ํŠธ๋Ÿญ์— ์‹ฃ๊ณ  ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์—์„œ ์„ธ ๋ฒˆ์งธ ์ƒ์ž ๋นผ์„œ ํŠธ๋Ÿญ์—์‹ฃ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ์ƒ์ž๋ฅผ ์‹ค์–ด์•ผ ํ•˜์ง€๋งŒ ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์—์„œ๋Š” ๋‘ ๋ฒˆ์งธ ์ƒ์ž๋ฅผ, ๊ธฐ์กด์˜ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์—๋Š” ๋‹ค์„ฏ ๋ฒˆ์งธ ์ƒ์ž๋ฅผ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”์ด์ƒ์˜ ์ƒ์ž๋Š” ์‹ค์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŠธ๋Ÿญ์—๋Š” 2๊ฐœ์˜ ์ƒ์ž๋งŒ ์‹ค๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํƒ๋ฐฐ ๊ธฐ์‚ฌ๋‹˜์ด ์›ํ•˜๋Š” ์ƒ์ž ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด order๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์˜์žฌ๊ฐ€ ๋ช‡ ๊ฐœ์˜ ์ƒ์ž๋ฅผ ์‹ค์„ ์ˆ˜ ์žˆ๋Š”์ง€ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.


๐Ÿ’›์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค order์˜ ๊ธธ์ด โ‰ค 1,000,000
  • order๋Š” 1์ด์ƒ order์˜ ๊ธธ์ด ์ดํ•˜์˜ ๋ชจ๋“  ์ •์ˆ˜๊ฐ€ ํ•œ๋ฒˆ์”ฉ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • order[i]๋Š” ๊ธฐ์กด์˜ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— order[i]๋ฒˆ์งธ ์ƒ์ž๋ฅผ i+1๋ฒˆ์งธ๋กœ ํŠธ๋Ÿญ์— ์‹ค์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’š์ž…์ถœ๋ ฅ ์˜ˆ

orderresult
[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
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€