본문 바로가기
Algorithm(CodeTree, C++)/1차원 배열

[코드트리] 배열 놀이 C

by kurooru 2024. 5. 19.
* 입력 개수가 라인에 따라 다를 때 처리 방법
  1. #include <string.h> // 헤더 import
  2. char input[100] // 각 입력을 문장 단위로 받을 준비
  3. fgets(input, sizeof(input), stdin); // input에 입력 라인 넣기
  4. int numArgs = sscanf(input, "%d %d %d", &order, &num1, &num2); numArgs는 입력 개수를 가리킴, 각각의 변수에 대입
  5. numArgs에 따라 다르게 처리  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void getNum(int *intList, int idx) {
    printf("%d\n", intList[idx]);
}

void getIdx(int *intList, int n, int num) {

    for (int i = 0; i < n; i++) {
        if (intList[i] == num) {
            printf("%d\n", i+1);
            return;
        }
    }
    printf("0\n");
    return;

}

void getNumsBetween(int *intList, int s, int e) {
    for (int i = s; i <= e; i++) {
        printf("%d ", intList[i]);
    }
    printf("\n");
}

int main() {
    int n, q;
    scanf("%d %d", &n, &q);

    // 배열 동적 할당
    int *intList = (int *)calloc(n, sizeof(int));
    for (int i = 0; i < n; i++) {
        scanf("%d ", &intList[i]);
    }

    char input[100];
    int order, num1, num2;
    for (int i = 0; i < q; i++) {
        // 입력 라인을 문자열로 읽기
        fgets(input, sizeof(input), stdin);
        
        // 입력된 문자열을 공백으로 분리하여 필요한 변수에 할당
        int numArgs = sscanf(input, "%d %d %d", &order, &num1, &num2);

        if (numArgs == 2) {
            if (order == 1) {
                getNum(intList, num1 - 1); // 1-based to 0-based index
            } else if (order == 2) {
                getIdx(intList, n, num1);
            }
        } else if (numArgs == 3) {
            if (order == 3) {
                getNumsBetween(intList, num1 - 1, num2 - 1); // 1-based to 0-based index
            }
        }
    }

    free(intList);

    return 0;
}