https://school.programmers.co.kr/learn/courses/30/lessons/118667
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 나의 풀이
✅ Queue : FIFO (Fisrt In First Out)
import : java.utill.*; / import java.util.LinkedList; + import java.util.Queue;
✅ 정수형 Queue 2개 사용 ➡︎ Queue<Integer> q = new LinkedList<>();
Queue 값 추가 : 해당 큐 맨 뒤에 값 삽입, 값 추가 성공 시 true 반환
- q.add(x); ➡︎ 큐가 꽉찬 경우 IllegalStateExceiption 에러 발생
- q.offer(x); ➡︎ 값 추가 실패 시 false 반환
Queue 값 삭제 : 해당 큐 맨 앞에 값 반환 후 삭제
- q.remove(); ➡︎ 큐가 비어있는 경우 NoSuchElementException 에러 발생
- q.poll(); ➡︎ 큐가 비어있는 경우 Null 반환
- q.clear(); ➡︎ 큐 초기화
Queue 값 확인 : 해당 큐 맨 앞에 값 반환
- q.element(); ➡︎ 큐가 비어있는 경우 NoSuchElementException 에러 발생
- q.peek(); ➡︎ 큐가 비어있는 경우 Null 반환
✅ 두 큐의 합의 절반 ➡︎ 도달해야하는 한쪽 큐의 합 : sumGoal
두 큐의 합이 홀수라면, 각각의 두 큐가 같은 합을 가질 수 없음
- 나의 코드
import java.util.*;
import java.lang.*;
class Solution {
public int solution(int[] queue1, int[] queue2) {
int answer = 0;
long sumGoal = 0;
long sumTotal = 0;
long sum1 = 0;
Queue<Integer> q1 = new LinkedList<>();
Queue<Integer> q2 = new LinkedList<>();
for(int i=0; i<queue1.length; i++) {
sumTotal += queue1[i] + queue2[i];
sum1 += queue1[i];
q1.offer(queue1[i]);
q2.offer(queue2[i]);
}
sumGoal = sumTotal / 2;
if((sumTotal % 2) != 0) {
return -1;
}
while(true) {
if(answer > (queue1.length + queue2.length) * 2) {
return -1;
}
if(sum1 == sumGoal) {
break;
} else if(sum1 > sumGoal) {
sum1 -= q1.peek();
q2.offer(q1.poll());
} else {
sum1 += q2.peek();
q1.offer(q2.poll());
}
answer++;
}
return answer;
}
}
'공부 > 알고리즘' 카테고리의 다른 글
카펫 (0) | 2024.08.03 |
---|---|
2024 KAKAO WINTER INTERNSHIP > 가장 많이 받은 선물 (0) | 2024.08.01 |
같은 숫자는 싫어 (0) | 2024.08.01 |
폰켓몬 (0) | 2024.08.01 |
2022 KAKAO TECH INTERNSHIP > 성격 유형 검사하기 (3) | 2023.12.01 |