개발자 톡

연습문제 톡 [HSAT 5회 정기 코딩 인증평가 기출] 업무 처리

[인증평가 5차 기출] 업무처리 c++ 오류 찾아주세요!

등록일
2023-03-07 03:47:10
조회수
588
작성자
kalvg7240

#include
#include
#include
using namespace std;

int main()
{
    int H, K, R;
    cin >> H >> K >> R;
    
    int sum = 0;
    for(int i = 0 ; i <= H ; i++)
    {
        sum += pow(2,i);
    }

    vector> Hmotors (sum+1,vector());
    vector TF(sum,1);

    for(int i = 0 ; i <  pow(2,H) ; i++)
    {
        for(int j = 1; j <= K ; j++)
        {
            int A;

            cin >> A;
            Hmotors[i].push_back(A);
        }
    }

    for(int i = 0; i < R ; i++)
    {
        int movepoint = 2;
        for(int j = sum-1 ; j >= 0 ; j--)
        {
            if (Hmotors[j].size()!=0)
            {
                if (j < pow(2,H))
                {
                    Hmotors[j+(movepoint/2)].push_back(Hmotors[j][0]);
                    Hmotors[j].erase(Hmotors[j].begin());
                }
                else if (i%2==0 && TF[j]==1)
                {
                    Hmotors[j+(movepoint/2)].push_back(Hmotors[j][1]);
                    Hmotors[j].erase(Hmotors[j].begin()+1);
                }
                else
                {
                    Hmotors[j+(movepoint/2)].push_back(Hmotors[j][0]);
                    Hmotors[j].erase(Hmotors[j].begin());
                }
                TF[j] = 0;
            }
            movepoint++;
        }

    }

    int count = 0;

    for (int i : Hmotors[sum])
    {
        count += i;
    }

    cout << count ;

    return 0;
}


2차원 배열을 생성하여 업무를 저장하여 넘겨주는 방식입니다

예를 들어 3층 구조라고 하면 8+4+2+1+1 개의 행을 만들어 각각에 업무를 넣어준뒤 

목표 인덱스에 업무를 넘겨주는 방식으로 구성하였습니다.

이때, 홀수 짝수 날을 구분하기 위해서 한번이라도 넘겨준적이 있는 인덱스는 받은 순서대로 넘겨주고, 한번도 넘겨준적이 없는 인덱스는 홀 짝수 날을 구분해서 넘겨주도록 하였습니다.


Subtask1 에서는 다 맞는데 Subtask2 에서는 몇개씩 틀립니다. 도저히 이유를 못찾겠어서 테스트 케이스라도 주시면 감사하겠습니다.

#[hsat_5회_정기_코딩_인증평가_기출]_업무_처리
#c++

이 카테고리의 톡 더보기