새소식

코딩테스트/프로그래머스

[C++] 두 큐 합 같게 만들기

  • -

[문제]

코딩테스트 연습 - 두 큐 합 같게 만들기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제 풀이]

두 포인터(투 포인터)를 이용해서 쉽게 정답이 유추가 되는 문제였다.

우선 qeuue1, queue2 배열의 모든 원소를 더한 숫자를 먼저 ans1, ans2로 만들어주자.

그리고 두 배열의 모든 원소가 들어가있는 벡터 vec를 만들어주자.

이제 0부터 시작하는 start 변수와 queue1의 크기(index는 0부터 시작이니 queue1의 크기라는건 queue2의 첫번째 원소이다.) 값이 들어가있는 end 변수를 만들어주자.

 

이제 두 포인터를 이용해서 반복문을 돌리고 만일 end가 vec의 크기만큼 커지거나 ans1, ans2 변수의 크기가 같아지면 종료를 해주자.

[회고]

두 포인터가 쉽게 연상이 되었는데 두개의 배열에서 해본건 처음이라 구현부분에서 처음에 살짝 헤매었었다.

실제 코테에서 못 풀만한 문제는 아니지만 헷갈리면 시간을 뺏길만한 문제이니 주의하자.

[코드]

#include <string>
#include <iostream>
#include <vector>

using namespace std;

int solution(vector<int> queue1, vector<int> queue2) {
    int answer = -1;
    //투포인터로 합의 일치 확인.
    
    vector<int> vec;
    long long ans1 = 0;
    long long ans2 = 0;
    
    for(int i = 0; i<queue1.size();i++){
        vec.push_back(queue1[i]);
        ans1 += queue1[i];
    }
    
    for(int i = 0;i<queue2.size();i++){
        vec.push_back(queue2[i]);
        ans2 += queue2[i];
    }
    
    int start = 0;
    int end = queue1.size();
    int count = 0;

    while(start < end && end <= vec.size()){
        // cout<<"ans : "<<ans1<<" "<<ans2<<endl;
        if(ans1 < ans2){
            ans1 += vec[end];
            ans2 -= vec[end];
            end++;
        }
        else if(ans1 > ans2){
            ans1 -= vec[start];
            ans2 += vec[start];
            start++;
        }
        else if(ans1 == ans2){
            //상황종료.
            answer = count;
            break;
        }        
        count++;
    }
    
    return answer;
}

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[C++] 가장 먼 노드  (0) 2023.08.09
[Swift] 가장 먼 노드  (0) 2023.08.09
[C++] 테이블 해시 함수  (0) 2023.07.14
[C++] 택배상자  (0) 2023.06.25
[C++] 점 찍기  (0) 2023.06.25
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.