혜랑's STORY

[HackerRank] Equal Stacks 본문

2021 SISS 21기 활동/2학기 C

[HackerRank] Equal Stacks

hyerang0125 2021. 9. 24. 16:29

 

3주차 자료구조 복습
Prepare > Data Structures > Stacks

풀이

스택을 사용하여 h1, h2, h3 배열의 데이터 합이 같아지도록 만드는 문제이다. 배열을 거꾸로 돌며 각 스택에 넣어주며, 합을 계산하였다. 이후 각 합이 가질 수 있는 모든 경우의 수를 계산하여 데이터를 제거할 스택을 골라 num에 넣어주고, switch를 이용하여 최상위 값을 제거하였다.

전체 코드는 다음과 같다.

int equalStacks(vector<int> h1, vector<int> h2, vector<int> h3) {
    stack<int> s_h1, s_h2, s_h3;
    int sum1, sum2, sum3, num;
    sum1 = sum2 = sum3 = 0;
    for(int i=h1.size()-1; i>=0; i--){
        s_h1.push(h1[i]);
        sum1 += s_h1.top();
    }
    for(int i=h2.size()-1; i>=0; i--){
        s_h2.push(h2[i]);
        sum2 += s_h2.top();
    }
    for(int i=h3.size()-1; i>=0; i--){
        s_h3.push(h3[i]);
        sum3 += s_h3.top();
    }
    
    while(true){
        if((sum1 == sum2) && (sum2 == sum3)) break;
        
        if(sum1 > sum2){
            if(sum1 > sum3) num = 1;
            else num = 3;
        }
        if(sum2 > sum3){
            if(sum2 > sum1) num = 2;
            else num = 1;
        }
        if(sum3 > sum1){
            if(sum3 > sum2) num = 3;
            else num = 2;
        }
        
        switch (num) {
        case 1:
            sum1 -= s_h1.top();
            s_h1.pop(); break;
        case 2:
            sum2 -= s_h2.top();
            s_h2.pop(); break;
        case 3:
            sum3 -= s_h3.top();
            s_h3.pop(); break;
        }
    }
    
    return sum1;
}

 

여러 테스트 케이스도 통과하였다.

'2021 SISS 21기 활동 > 2학기 C' 카테고리의 다른 글

[HackerRank] Electronics Shop  (0) 2021.10.01
[HackerRank] Closet Numbers  (0) 2021.09.24
[HackerRank] Jim and the Orders  (0) 2021.09.17
[HackerRank] Permuting Two Arrays  (0) 2021.09.17
[HackerRank] Mark and Toys  (0) 2021.09.12