๐ ์๊ณ ๋ฆฌ์ฆ ์ ํ
๋ณ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์๊ณ , ๊ตฌํ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๋ค.
๐ ํ์ด
์ ์งํ๊ฒ ํ์ ์ฌ์ด์ฆ๋งํผ ๋ฐ๋ณตํด์ ํ์ดํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค. ๊ทธ๋ ๊ธฐ์ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์ ๊ทผํ ํ์๊ฐ ์๋ค.
ํ์ชฝ ํ์ ํฉ์ (๋ ํ์ ํฉ / 2)๋ก ๋ง๋ค์ด์ฃผ๋ฉด ์ด๋จ๊น?
ํ์ชฝ ํ์ ํฉ์ด
(์ด๊ธฐ์ ๋ ํ์ ํฉ / 2)๋ณด๋ค ํฌ๋ฉด pollํ์ฌ ๋ค๋ฅธ ํ์ add ํด์ฃผ๊ณ ,
์์ผ๋ฉด ๋ค๋ฅธ ํ์์ poll ํ์ฌ ํ์ชฝ ํ์ add ํด์ฃผ๋ฉด ๋๋ค.
๋ฐ๋ณต๋ฌธ์ ํ์ชฝ ํ์ ํฉ๊ณผ (์ด๊ธฐ์ ๋ ํ์ ํฉ / 2)์ด ๊ฐ์์ง ๋๊น์ง ๋ฐ๋ณตํ๋ฉด ๋๋๋ฐ,
์ด๋ค ๋ฐฉ์์ผ๋ก๋ ๋ ํ์ ํฉ์ ๊ฐ๊ฒ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๊ธฐ์, ์ด๊ธฐ์ ํ์ชฝ ํ์ ๊ธธ์ด์ 3๋ฐฐ ๋งํผ ๋ฐ๋ณต๋ฌธ์ ๋ฐ๋ณตํด์ฃผ๊ณ , ๊ทธ๋๋ ๋ ํ์ ํฉ์ด ๊ฐ์ง ์๋ค๋ฉด -1์ ๋ฆฌํดํด์ฃผ์.
์ฌ๊ธฐ์, ์ 3๋ฐฐ์ผ๊น?
๋๊ฐ ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด๋ฉด, ํ1๊ณผ ํ2์ ๊ฐ๋ค์ ์๋ก ์ ๋ถ ๊ตํํ๋ ๊ฒฝ์ฐ์ธ๋ฐ ์ด๋ ๋๋ต ํ์ ๊ธธ์ด์ 2๋ฐฐ ๋งํผ ๋ฐ๋ณตํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ํ์ ๊ธธ์ด์ 3๋ฐฐ ๋งํผ ๋ฐ๋ณตํด์ค๋ค๋ฉด, ์์ธ ์ํฉ๋ ์๊ณ ์๊ฐ ์ด๊ณผ๋ ๋์ง ์์ ๊ฒ์ด๋ค.
๐ ์ฝ๋
import java.util.*;
class Solution {
public int solution(int[] queue1, int[] queue2) {
int answer = -2;
Queue<Integer> que1 = new LinkedList<>();
Queue<Integer> que2 = new LinkedList<>();
long total = 0; // ๋ ํ์ ๋ด๊ธด ์๋ค์ ํฉ / 2
long hap = 0; // ํ1์ ํฉ์ ์ค์๊ฐ์ผ๋ก ์ ์ฅํ ๋ณ์
for(int i = 0; i < queue1.length; i++) {
total += queue1[i];
hap += queue1[i];
total += queue2[i];
que1.add(queue1[i]);
que2.add(queue2[i]);
}
int maxCount = queue1.length * 3;
total /= 2; // ํ๋์ ํ์ ํฉ์ด ์ ์ฒด/2์ ๊ฐ์ผ๋ฉด ๋จ
while(hap != total) {
// ์ด๋ค ๊ฒฝ์ฐ์๋ ๊ฐ ํ์ ์์ ํฉ์ ๊ฐ๊ฒ ๋ง๋ค ์ ์์ ๋
if(maxCount == 0)
return -1;
// ํ1์ ํฉ์ด ํ2์ ํฉ๋ณด๋ค ํด ๋
if(hap > total) {
int temp1 = que1.poll();
hap -= temp1;
que2.add(temp1);
}
// ํ1์ ํฉ์ด ํ2์ ํฉ๋ณด๋ค ์์ ๋
else {
int temp2 = que2.poll();
hap += temp2;
que1.add(temp2);
}
maxCount--;
}
return queue1.length * 3 - maxCount;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/118667
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋๊ธ