-
[Programmers] 두 큐 합 같게 만들기 / ⭕Algorithm/Programmers 2024. 10. 7. 10:19
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 제출 코드 (40분 49초 / 큐)
import java.util.*; class Solution { public int solution(int[] queue1, int[] queue2) { int answer = 0; ArrayDeque<Integer> q1 = new ArrayDeque<>(); ArrayDeque<Integer> q2 = new ArrayDeque<>(); long tq1 = 0; long tq2 = 0; boolean isValid = false; for(int i = 0; i < queue1.length; i++) { q1.add(queue1[i]); q2.add(queue2[i]); tq1 += queue1[i]; tq2 += queue2[i]; } while(tq1 != tq2) { if(answer == queue1.length * 3) { answer = -1; break; } if(tq1 > tq2) { int t = q1.pop(); q2.add(t); tq1 -= t; tq2 += t; } else if(tq1 < tq2) { int t = q2.pop(); q1.add(t); tq2 -= t; tq1 += t; } answer++; } return answer; } }
2. 구현 로직
- 각 배열의 값을 큐에 넣어주고 큐의 합을 각각 저장한다.
- 각 큐의 합이 같아질 때까지 반복한다.
- tq1이 크다면 q1.pop()하고 해당 값만큼 tq1의 값을 빼준다. 그리고 tq2의 값을 해당 값만큼 더한다.
- tq2이 크다면 q2.pop()하고 해당 값만큼 tq2의 값을 빼준다. 그리고 tq1의 값을 해당 값만큼 더한다.
- 만약, answer가 queue1.lenght*3과 같다면 같은 값을 만들 수 없으므로 answer = -1
3. 유의할 점
- 큐의 원소 합을 같게 만들 수 없는 경우의 조건을 고려해야될 거 같다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 주차 요금 계산 / ⭕ (0) 2024.10.07 [Programmers] 롤케이크 자르기 / ❌ (0) 2024.10.07 [Programmers] 할인 행사 / ⭕ (1) 2024.10.06 [Programmers] 택배상자 / ⭕ (0) 2024.10.06 [Programmers] 우박수열 정적분 / ⭕ (0) 2024.10.06