[백준] #5430. AC

MTTW·2021년 2월 1일
0

Problem Solving

목록 보기
4/11
post-thumbnail

문제는 여기서 확인할 수 있다. BaekJoon #5430. AC


💀 시행착오

평소에 백준 풀이글은 풀이과정이 메인이고 시행착오는 기록일 뿐이었지만 5430번 만큼은 시행착오가 메인 내용이다.
멍청한 실수를 하고 두 시간 동안 삽질하다가 마지막에 틀린 것을 발견했을 때의 허무함이란...

암튼 요약하자면 문제는 제대로 읽자

입력을 받을 때 100,000개의 수가 들어온다는 것만 읽고 input[100,010]를 사용했다. 여유도 있게 받았겠다, 이게 문제가 될 줄은 몰랐지만 하지만 [,]을 토큰으로 strtok 함수로 나누려했기 때문에 input 배열은 char형이었다.
그리고 각 수는 100보다 작거나 같은 수... 각 수의 길이가 최대 3, 쉼표 한자리 숫자 하나에 약 4개의 문자가 쓰인다.

따라서 input[400010] 사이즈의 문자열 배열이 필요하다.
문제는 제대로 읽자


🤔 풀이과정

위와 같은 실수만 하지 않는다면 풀이과정은 간단하다.

  1. 입력을 받고 배열은 strktok으로 나눠서 저장해준다.
  2. R 명령은 swap 함수로 frontend를 바꿔준다.
  3. D 명령은 값을 하나씩 이동해준다.
  4. 정방향/역방향을 구분해서 출력한다.

하나씩 보자.

  1. 입력
void get_input(string &order, int &arr_size){
    cin >> order;
    scanf("%d", &arr_size);

    int index = 0;
    scanf("%s", arr_str);
    // 숫자 하나씩 strtok
    char *ptr = strtok(arr_str, "[, ");
    while(ptr != NULL){
        arr[index++] = atoi(ptr);
        ptr = strtok(NULL, "[,] ");
    }
    return;
}

2, 3. R, D 명령

    int front = 0, end = arr_size - 1;
    int isFront = -1;   // 정방향이면 -1, 역방향이면 1
    int order_len = order.length();

    for(int i=0; i<order_len; i++){
        if(order[i] == 'R'){
            swap(front, end);
            isFront = -isFront;
        }
        else {
            front = front - isFront;
        }
    }
  1. 출력
   // 정방향
   if(isFront < 0 && front <= end+1) {
        // 빈 결과
        if(front == end + 1) printf("[]\n");
        else{
            printf("[");
            for(int i=front; i<end; i++){
                printf("%d,", arr[i]);
            }
            printf("%d]\n", arr[end]);
        }
    }
    // 역방향
    else if(isFront > 0 && front >= end - 1){
    	// 빈 결과
        if(front == end -1) printf("[]\n");
        else{
            printf("[");
            for(int i=front; i>end; i--){
                printf("%d,", arr[i]);
            }
            printf("%d]\n", arr[end]);
        }
    }
    else printf("error\n");

💬 주저리

1학년 때부터 지금까지 항상 잔실수가 많다.
언제쯤이면 잘못 읽거나, 잘못 입력하는 실수가 줄어들까😥

profile
개발자가 되고 싶은 맽튜

0개의 댓글