반응형
🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
import java.util.*;
class Solution {
public int solution(int[] queue1, int[] queue2) {
int answer = 0;
long sum1 = 0; // 1번 큐의 합
long sum2 = 0; // 2번 큐의 합
Queue<Integer> q1 = new LinkedList<>();
Queue<Integer> q2 = new LinkedList<>();
for(int i = 0 ; i < queue1.length ; i++) {
sum1 += queue1[i];
sum2 += queue2[i];
q1.add(queue1[i]);
q2.add(queue2[i]);
}
long target = (sum1 + sum2) / 2;
while(sum1 != sum2) {
if(answer >= queue1.length * 3) // 큐를 최대 3번까지 순회하며 합을 맞출 수 있음
return -1;
if(sum1 > sum2) {
sum1 -= q1.peek();
q2.add(q1.peek());
sum2 += q1.poll();
}
else {
sum2 -= q2.peek();
q1.add(q2.peek());
sum1 += q2.poll();
}
answer++;
}
return answer;
}
}
|
cs |
🧩 해결 아이디어
• 그리디 - 각 큐의 합
- array1의 값을 담은 큐와 array2의 값을 담은 큐를 생성한다.
- 이 두 큐의 값이 합이 다른 경우, 두 값이 같아질 때까지 합이 큰 큐는 맨 앞의 원소를 빼서 작은 큐의 맨 뒤에 값을 더한다.
- 시간 복잡도 : O(N) (∵ 입력값 : 30만)
💥 유의사항
: queue1.length * 2가 아님! 무조건 길이의 합보다 크게 잡아야 함.
💬 느낀 점
그리디만 나오면 쫄아버린다.....
쫄지 말자!!!
할 수 있다!!
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 11.23 | 24.1.21 |
(+ 2회독 11.23)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import java.util.*;
class Solution {
public int solution(int[] queue1, int[] queue2) {
int answer = 0; // 필요한 작업의 최소 횟수
long sum1 = 0;
long sum2 = 0;
Deque<Integer> deque1 = new ArrayDeque<>();
Deque<Integer> deque2 = new ArrayDeque<>();
for(int i = 0 ; i < queue1.length ; i++) {
deque1.add(queue1[i]);
deque2.add(queue2[i]);
sum1 += queue1[i];
sum2 += queue2[i];
}
while(sum1 != sum2) {
// 큐를 최대 3번까지 순회하며 합 맞출 수 있음
if(answer >= queue1.length * 3) {
return -1;
}
if(sum1 < sum2) {
deque1.addLast(deque2.peekFirst());
sum1 += deque2.peekFirst();
sum2 -= deque2.pollFirst();
}
else if(sum1 > sum2) {
deque2.addLast(deque1.peekFirst());
sum2 += deque1.peekFirst();
sum1 -= deque1.pollFirst();
}
answer++;
}
return answer;
}
}
|
cs |
(참고)
[프로그래머스] lv2 두 큐의 합 같게 만들기 (JAVA)
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/118667# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합
sumdev.tistory.com
[프로그래머스] 두 큐 합 같게 만들기 (Java)
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 최초 접
maicoding.tistory.com
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 2] 주차 요금 계산 (JAVA) (0) | 2023.11.21 |
---|---|
[프로그래머스/Lv. 2] 행렬 테두리 회전하기 (JAVA) (0) | 2023.11.21 |
[프로그래머스/Lv. 2] 숫자 카드 나누기 (JAVA) (0) | 2023.11.12 |
[프로그래머스/Lv. 2] 삼각 달팽이 (JAVA) (0) | 2023.11.12 |
[프로그래머스/Lv. 2] 롤케이크 자르기 (JAVA) (0) | 2023.10.30 |