[프로그래머스 C++] 두 큐 합 같게 만들기
[프로그래머스 C++] 두 큐 합 같게 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/118667
해결방안
큐, Queue
처음 시도한 코드
#include <queue>
#include <vector>
using namespace std;
queue<int> Q, calQ;
int sumNum;
int answer;
int solution(vector<int> queue1, vector<int> queue2) {
int n = queue1.size();
for(int i=0; i<n; i++){
sumNum += (queue1[i] + queue2[i]);
Q.push(queue1[i]);
}
for(int i=0; i<n; i++){
Q.push(queue2[i]);
}
bool success = false;
int maxTry = 4 * n;
int total = 0;
while(!Q.empty() && maxTry--)
{
answer++;
if (total > sumNum / 2)
{
total -= calQ.front();
calQ.pop();
}
else if (total < sumNum / 2)
{
total += Q.front();
calQ.push(Q.front());
}
else if (total == sumNum / 2)
{
success = true;
break;
}
int front = Q.front();
Q.pop();
Q.push(front);
}
if (success) answer -= (n-1);
else answer = -1;
return answer;
}
정답코드
#include <queue>
#include <vector>
using namespace std;
queue<int> Q1, Q2;
long long sum1, sum2, sumNum;
int answer;
int solution(vector<int> queue1, vector<int> queue2) {
int n = queue1.size();
for(int i=0; i<n; i++){
sumNum += queue1[i] + queue2[i];
sum1 += queue1[i];
Q1.push(queue1[i]);
sum2 += queue2[i];
Q2.push(queue2[i]);
}
bool success = false;
int maxTrial = 3 * n;
while (maxTrial--)
{
if(sum1 == sum2){
success = true;
break;
}
else if(sum1 < sum2){
sum1 += Q2.front();
sum2 -= Q2.front();
Q1.push(Q2.front());
Q2.pop();
}
else{ // sum1 > sum2
sum1 -= Q1.front();
sum2 += Q1.front();
Q2.push(Q1.front());
Q1.pop();
}
answer++;
}
if (false == success) answer = -1;
return answer;
}
'⭐ 코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] 124 나라의 숫자 (0) | 2023.11.16 |
---|---|
[프로그래머스 C++] 연속된 부분 수열의 합 (0) | 2023.11.15 |
[프로그래머스 C++] 삼각 달팽이 (0) | 2023.11.13 |
[프로그래머스 C++] 다리를 지나는 트럭 (0) | 2023.11.10 |
[프로그래머스 C++] 큰 수 만들기 (1) | 2023.11.09 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스 C++] 124 나라의 숫자
[프로그래머스 C++] 124 나라의 숫자
2023.11.16 -
[프로그래머스 C++] 연속된 부분 수열의 합
[프로그래머스 C++] 연속된 부분 수열의 합
2023.11.15 -
[프로그래머스 C++] 삼각 달팽이
[프로그래머스 C++] 삼각 달팽이
2023.11.13 -
[프로그래머스 C++] 다리를 지나는 트럭
[프로그래머스 C++] 다리를 지나는 트럭
2023.11.10