https://school.programmers.co.kr/learn/courses/30/lessons/118667
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
저는 투 포인트를 통해 문제를 해결하였습니다.
먼저 두 큐의 총 합을 구하고 이 값이 짝수인지 판단하였습니다. 짝수가 되지 않는다면, 합을 같게 나눌 수 없기에 바로 -1을 리턴하였습니다.
그 다음은 두 큐를 하나로 합치면서 첫 큐의 합을 구하였습니다.
이제 투 포인트를 0, 한 큐의 사이즈로 잡았습니다. (첫 큐의 합을 구하였기에 이렇게 하였습니다.)
여기서 합이 두 큐의 총합/2보다 작다면 끝포인트를 늘리면서 합을 늘리고 작다면 시작포인트를 늘리면서 합을 줄이면서 두 큐의 총합/2과 같아지는 지점이 있는지 파악하여 문제를 해결하였습니다.
class Solution {
private static final int NOT_FOUND = -1;
public int solution(int[] queue1, int[] queue2) {
long sum = 0;
int size = queue1.length;
for(int i = 0 ; i < size ; i++){
sum += queue1[i] + queue2[i];
}
if(sum % 2 != 0){
return NOT_FOUND;
}
long halfSum = sum / 2;
int totalSize = 2*size;
int[] totalQueue = new int[totalSize];
sum = 0;
for(int i = 0 ; i < size ; i++){
totalQueue[i] = queue1[i];
sum += queue1[i];
totalQueue[size + i] = queue2[i];
}
int startIndex = 0;
int endIndex = size;
int answer = 0;
while(true){
if(sum == halfSum){
break;
}
if(sum < halfSum){
if(endIndex >= totalSize){
return NOT_FOUND;
}
sum += totalQueue[endIndex++];
answer++;
continue;
}
if(sum > halfSum){
sum -= totalQueue[startIndex++];
answer++;
continue;
}
answer++;
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 2xn타일링 (JAVA) (0) | 2023.07.21 |
---|---|
프로그래머스 짝지어 제거하기 (JAVA) (0) | 2023.07.20 |
프로그래머스 연속된 부분 수열의 합 (JAVA) (0) | 2023.07.18 |
프로그래머스 완주하지 못한 선수 (JAVA) (0) | 2023.07.17 |
백준 18511번 큰 수 구성하기 (JAVA) (0) | 2023.07.16 |