프로그래머스 두 큐 합 같게 만들기 JAVA

sundays·2022년 9월 30일
0

문제

두 큐 합 같게 만들기

풀이

문제를 또 잘못 이해 했다. 다들 풀이가 너무 단순해서 뭔가 했더니 역시나...
문제만 두 큐의 합인줄 알았더니 진짜 실제 큐의 행동처럼 값을 꺼내는 것은 큐의 가장 앞에서만 하는 것이고 큐에 값을 넣을때는 마지막 원소에 넣을 수 있는것이었다

배열로 원소가 주어지기 때문에 큐에 넣을때는 순서에 상관없이 넣고 뺄 수 있을 줄 알았다 만약 순서에 상관없이 넣고 뺄수 있다면 더 빠른 순서로도 조합할 수 있을 것이다. q1 :[1, 2, 1, 2], q2: [1, 10, 1, 2] 인경우 7번이 아닌 3번만에 가능하기 때문이다

이 문제는 그렇기 때문에 정말 단순하게 브루트 포스로 풀면 된다.

  1. 큐의 값을 셋팅해준다 큐의 길이가 같기때문에 한번에 넣을 수 있다
		for (int i = 0; i < queue1.length; i++) {
            q1.add(queue1[i]);
            q2.add(queue2[i]);
            sum1 += queue1[i];
            sum2 += queue2[i];
        }
  1. 두 큐의 값이 같아지기 전까지 반복해준다
		while(sum1 != sum2) {
            answer++;

            if(sum1 > sum2) {
                int value = q1.poll();
                sum1 -= value;
                sum2 += value;
                q2.offer(value);
            } else {
                int value = q2.poll();
                sum1 += value;
                sum2 -= value;
                q1.offer(value);
            }

            if(answer > queue1.length * 4) return -1;
        }
  • if else 에서는 값을 빼주고 다른 큐에 넣어줄때마다 횟수를 증가시켜주는 answer 변수를 갱신해준다.
  • 한쪽에 전부 이동해서 있을 경우에서 두배인 경우 까지 반복했을때도 아니면 -1을 출력해준다. 이부분은 정말 블로그마다 천차만별이다 2배이상으로만 하면 무조건 되는 느낌이다 아직 테스트 케이스가 이부분까진 체크를 안하는듯

전체 코드

전체 코드

profile
develop life

0개의 댓글