๐ŸŽ‘[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋‘ ํ ํ•ฉ ๊ฐ™๊ฒŒ ๋งŒ๋“ค๊ธฐ

Chobbyยท2022๋…„ 8์›” 24์ผ
1

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
36/345

Pixabay๋กœ๋ถ€ํ„ฐ ์ž…์ˆ˜๋œ Mediamodifier๋‹˜์˜ ์ด๋ฏธ์ง€ ์ž…๋‹ˆ๋‹ค.

์œ„ ๊ฒŒ์‹œ๋ฌผ์€ youngcheon๋‹˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋‘ ํ ํ•ฉ ๊ฐ™๊ฒŒ ๋งŒ๋“ค๊ธฐ ๊ฒŒ์‹œ๋ฌผ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ œ์ž‘๋˜์—ˆ์Œ์„ ๋ฏธ๋ฆฌ ๋ฐํž™๋‹ˆ๋‹ค.

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

๊ธธ์ด๊ฐ€ ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ํ๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ๋ฅผ ๊ณจ๋ผ ์›์†Œ๋ฅผ ์ถ”์ถœ(pop)ํ•˜๊ณ , ์ถ”์ถœ๋œ ์›์†Œ๋ฅผ ๋‹ค๋ฅธ ํ์— ์ง‘์–ด๋„ฃ๋Š”(insert) ์ž‘์—…์„ ํ†ตํ•ด ๊ฐ ํ์˜ ์›์†Œ ํ•ฉ์ด ๊ฐ™๋„๋ก ๋งŒ๋“ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ํ•„์š”ํ•œ ์ž‘์—…์˜ ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ pop๊ณผ ํ•œ ๋ฒˆ์˜ insert๋ฅผ ํ•ฉ์ณ์„œ ์ž‘์—…์„ 1ํšŒ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

ํ๋Š” ๋จผ์ € ์ง‘์–ด๋„ฃ์€ ์›์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์—์„œ๋Š” ํ๋ฅผ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ, ์›์†Œ๊ฐ€ ๋ฐฐ์—ด ์•ž์ชฝ์— ์žˆ์„์ˆ˜๋ก ๋จผ์ € ์ง‘์–ด๋„ฃ์€ ์›์†Œ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, pop์„ ํ•˜๋ฉด ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๊ฐ€ ์ถ”์ถœ๋˜๋ฉฐ, insert๋ฅผ ํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๋์— ์›์†Œ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ [1, 2, 3, 4]๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, pop์„ ํ•˜๋ฉด ๋งจ ์•ž์— ์žˆ๋Š” ์›์†Œ 1์ด ์ถ”์ถœ๋˜์–ด [2, 3, 4]๊ฐ€ ๋˜๋ฉฐ, ์ด์–ด์„œ 5๋ฅผ insertํ•˜๋ฉด [2, 3, 4, 5]๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋‘ ํ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

queue1 = [3, 2, 7, 2]
queue2 = [4, 6, 5, 1]

๋‘ ํ์— ๋‹ด๊ธด ๋ชจ๋“  ์›์†Œ์˜ ํ•ฉ์€ 30์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ ํ์˜ ํ•ฉ์„ 15๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. queue2์˜ 4, 6, 5๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ถ”์ถœํ•˜์—ฌ queue1์— ์ถ”๊ฐ€ํ•œ ๋’ค, queue1์˜ 3, 2, 7, 2๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ถ”์ถœํ•˜์—ฌ queue2์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ queue1์€ [4, 6, 5], queue2๋Š” [1, 3, 2, 7, 2]๊ฐ€ ๋˜๋ฉฐ, ๊ฐ ํ์˜ ์›์†Œ ํ•ฉ์€ 15๋กœ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์ž‘์—…์„ 7๋ฒˆ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  2. queue1์—์„œ 3์„ ์ถ”์ถœํ•˜์—ฌ queue2์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  queue2์—์„œ 4๋ฅผ ์ถ”์ถœํ•˜์—ฌ queue1์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ queue1์€ [2, 7, 2, 4], queue2๋Š” [6, 5, 1, 3]๊ฐ€ ๋˜๋ฉฐ, ๊ฐ ํ์˜ ์›์†Œ ํ•ฉ์€ 15๋กœ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์ž‘์—…์„ 2๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ด๋ณด๋‹ค ์ ์€ ํšŸ์ˆ˜๋กœ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ ํ์˜ ์›์†Œ ํ•ฉ์„ ๊ฐ™๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ž‘์—…์˜ ์ตœ์†Œ ํšŸ์ˆ˜๋Š” 2์ž…๋‹ˆ๋‹ค.

๊ธธ์ด๊ฐ€ ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ํ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด queue1, queue2๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๊ฐ ํ์˜ ์›์†Œ ํ•ฉ์„ ๊ฐ™๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ž‘์—…์˜ ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ๋‹จ, ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ๊ฐ ํ์˜ ์›์†Œ ํ•ฉ์„ ๊ฐ™๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, -1์„ return ํ•ด์ฃผ์„ธ์š”.


๐Ÿฑ์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค queue1์˜ ๊ธธ์ด = queue2์˜ ๊ธธ์ด โ‰ค 300,000
  • 1 โ‰ค queue1์˜ ์›์†Œ, queue2์˜ ์›์†Œ โ‰ค 109
  • ์ฃผ์˜: ์–ธ์–ด์— ๋”ฐ๋ผ ํ•ฉ ๊ณ„์‚ฐ ๊ณผ์ • ์ค‘ ์‚ฐ์ˆ  ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ long type ๊ณ ๋ ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿฅก์ž…์ถœ๋ ฅ ์˜ˆ

queue1queue2result
[3, 2, 7, 2][4, 6, 5, 1]2
[1, 2, 1, 2][1, 10, 1, 2]7
[1, 1][1, 5]-1

๐Ÿฅช์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

๋ฌธ์ œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

๋‘ ํ์— ๋‹ด๊ธด ๋ชจ๋“  ์›์†Œ์˜ ํ•ฉ์€ 20์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ ํ์˜ ํ•ฉ์„ 10์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. queue2์—์„œ 1, 10์„ ์ˆœ์„œ๋Œ€๋กœ ์ถ”์ถœํ•˜์—ฌ queue1์— ์ถ”๊ฐ€ํ•˜๊ณ , queue1์—์„œ 1, 2, 1, 2์™€ 1(queue2์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์›์†Œ)์„ ์ˆœ์„œ๋Œ€๋กœ ์ถ”์ถœํ•˜์—ฌ queue2์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ queue1์€ [10], queue2๋Š” [1, 2, 1, 2, 1, 2, 1]๊ฐ€ ๋˜๋ฉฐ, ๊ฐ ํ์˜ ์›์†Œ ํ•ฉ์€ 10์œผ๋กœ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์ž‘์—… ํšŸ์ˆ˜๋Š” 7ํšŒ์ด๋ฉฐ, ์ด๋ณด๋‹ค ์ ์€ ํšŸ์ˆ˜๋กœ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 7๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์“ฐ๋”๋ผ๋„ ๊ฐ ํ์˜ ์›์†Œ ํ•ฉ์„ ๊ฐ™๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ -1์„ return ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”๋‚˜์˜ ํ’€์ด

function solution(queue1, queue2) {
    // ์ตœ๋Œ€ ๋ฐ˜๋ณต
    let maxCount = queue1.length*3
    // ๋ฐ˜๋ณตํšŸ์ˆ˜
    let maxRepeat = 0
    // queue1+queue2
    const queueSum = [...queue1, ...queue2].reduce((a,b) => a+b)
    // (queue1+queue2)/2
    const halfSum = queueSum / 2
    // ๋ฐฐ์—ด์˜ ์ด ํ•ฉ์„ ๊ตฌํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
    const sum = (num) => num.reduce((a,b) => a+b)
    // ์ง์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ -1 ๋ฐ˜ํ™˜
    if(queueSum%2) return -1
    // ๋ฐฐ์—ด ํ•ฉ์น˜๊ธฐ
    const concatArr = [...queue1, ...queue2]
    // ์‹œ์ž‘
    let start = 0
    // ์ข…๋ฃŒ
    let end = queue1.length
    // ํ˜„ ๋ฐฐ์—ด์˜ ํ•ฉ
    let nowSumArr = sum(concatArr.slice(start, end))
    // ๋ฐ˜๋ณตํ•˜๋ฉฐ ๋‘ ๋ฐฐ์—ด์˜ ํ•ฉ์ด ๊ฐ™์•„์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    while(maxRepeat <= maxCount) {
        // ํ˜„ ๋ฐฐ์—ด์˜ ํ•ฉ์ด ์ดํ•ฉ์˜ ๋ฐ˜์ ˆ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
        if(halfSum > nowSumArr) {
            nowSumArr += concatArr[end]
            end++
        } else if(halfSum < nowSumArr) {
            nowSumArr -= concatArr[start]
            start++
        // ํ˜„ ๋ฐฐ์—ด์˜ ํ•ฉ์ด ์ดํ•ฉ์˜ ๋ฐ˜์ ˆ๊ณผ ๊ฐ™๋‹ค๋ฉด ํ˜„์žฌ์˜ ๋ฐ˜๋ณต์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
        } else if(halfSum === nowSumArr) return maxRepeat
        maxRepeat++
    }
    // ์ฐพ์ง€๋ชปํ–ˆ์œผ๋ฏ€๋กœ -1์„ ๋ฐ˜ํ™˜
    return -1
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

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