-
[java] 프로그래머스 두 큐 합 같게 만들기알고리즘 2023. 8. 6. 18:19
https://school.programmers.co.kr/learn/courses/30/lessons/118667
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음코드
import java.util.*; class Solution { public int solution(int[] queue1, int[] queue2) { int answer = -2; Queue<Integer> q1 = new LinkedList<>(); Queue<Integer> q2 = new LinkedList<>(); int sum1=0; int sum2=0; for(int i : queue1){ q1.add(i); sum1 += i; } for(int i : queue2){ q2.add(i); sum2 += i; } int fsum = (sum1+sum2)/2; int cnt=0; while(!q1.isEmpty()){ if(cnt>queue1.length+queue2.length){ return -1; } if(sum1==sum2) break; if(sum1>fsum){ int a = q1.poll(); q2.add(a); cnt++; sum1 -= a; sum2 += a; } if(sum2>fsum){ int a = q2.poll(); q1.add(a); cnt++; sum2 -= a; sum1 += a; } } return cnt; } }
무엇이 문제인가?
long 으로 바꾸고
어떤 방법으로도 각 큐의 원소 합을 같게 만들 수 없는 경우를 생각해서
cnt는 q1과 q2의 합의 2배로 해야한다.
import java.util.*; class Solution { public int solution(int[] queue1, int[] queue2) { int answer = -2; Queue<Integer> q1 = new LinkedList<>(); Queue<Integer> q2 = new LinkedList<>(); long sum1=0; long sum2=0; for(int i : queue1){ q1.add(i); sum1 += (long)i; } for(int i : queue2){ q2.add(i); sum2 += (long)i; } int cnt=0; while(sum1!=sum2){ if(cnt>(queue1.length+queue2.length)*2){ return -1; } if(sum1>sum2){ int a = q1.poll(); q2.add(a); cnt++; sum1 -= (long)a; sum2 += (long)a; } else if(sum2>sum1){ int a = q2.poll(); q1.add(a); cnt++; sum2 -= (long) a; sum1 += (long) a; } } return cnt; } }
'알고리즘' 카테고리의 다른 글
프로그래머스 할인행사 (0) 2023.08.08 [java] 백준 16967 : 배열 복원하기 (0) 2023.08.06 [java] 프로그래머스 lv2 전력망을 둘로 나누기 (0) 2023.08.06 프로그래머스 게임 맵 최단거리 (0) 2023.08.05 [java] 백준 16935 : 배열 돌리기 3 (0) 2023.07.30