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๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
queue2์ 4, 6, 5๋ฅผ ์์๋๋ก ์ถ์ถํ์ฌ queue1์ ์ถ๊ฐํ ๋ค, queue1์ 3, 2, 7, 2๋ฅผ ์์๋๋ก ์ถ์ถํ์ฌ queue2์ ์ถ๊ฐํฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ queue1์ [4, 6, 5], queue2๋ [1, 3, 2, 7, 2]๊ฐ ๋๋ฉฐ, ๊ฐ ํ์ ์์ ํฉ์ 15๋ก ๊ฐ์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์์ ์ 7๋ฒ ์ํํฉ๋๋ค.
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 ํด์ฃผ์ธ์.
queue1
์ ๊ธธ์ด = queue2
์ ๊ธธ์ด โค 300,000queue1
์ ์์, queue2
์ ์์ โค 109queue1 | queue2 | result |
---|---|---|
[3, 2, 7, 2] | [4, 6, 5, 1] | 2 |
[1, 2, 1, 2] | [1, 10, 1, 2] | 7 |
[1, 1] | [1, 5] | -1 |
๋ฌธ์ ์์์ ๊ฐ์ต๋๋ค.
๋ ํ์ ๋ด๊ธด ๋ชจ๋ ์์์ ํฉ์ 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 ํฉ๋๋ค.
์ด๋ค ๋ฐฉ๋ฒ์ ์ฐ๋๋ผ๋ ๊ฐ ํ์ ์์ ํฉ์ ๊ฐ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ๋ฐ๋ผ์ -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
}