본문 바로가기

C언어

2025년 2학기 1주차

 

#include <stdio.h>

#define MAX 100  // 큐 배열의 최대 크기다.문제에서  100으로 제시했으니 이만큼 한다
           

typedef struct {
    int star;   // 문서의 중요도(1~9)
    int index;  // 문서의 원래 위치로 0부터 시작한다
} Doc;

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

    while (T--) {
        int N, M;          
        scanf("%d %d", &N, &M);

        Doc queue[MAX];    
        int front = 0;     // 맨 앞(다음에 꺼낼 위치) 인덱스
        int rear = 0;      // 맨 뒤(다음에 넣을 위치) 인덱스
        int size = 0;      // 현재 들어있는 문서 개수

     
        for (int i = 0; i < N; i++) {
            scanf("%d", &queue[rear].star); // 중요도를 입력한다
            queue[rear].index = i;          
            rear = (rear + 1) % MAX;       // rear를 원형이므로 이동시킨다
            size++;                         // 큐 크기 증가
        }

        int count = 0; 


        // 실제 프린터 동작이다
     
        while (size > 0) {
      
            // pos는 front부터 size개 만큼 순회하면서 값을 본다.
            int max_star = 0;
            for (int i = 0, pos = front; i < size; i++) {
                if (queue[pos].star > max_star)
                    max_star = queue[pos].star;
                pos = (pos + 1) % MAX;
            }
           
            Doc current = queue[front];
            front = (front + 1) % MAX;
            size--; // 꺼냈으므로 size 감소

            // 중요도를 비교한다. 
            if (current.star == max_star) {
                // 현재가 큐에서 가장 높은 중요도라면 인쇄한다.
                count++; 
                if (current.index == M) {
                    printf("%d\n", count);
                    break; 
                }
            } else {
                
                queue[rear] = current;
                rear = (rear + 1) % MAX;
                size++; // 다시 넣었으니 size를 원상복구힌디
            }
          
        } 
    } 
    return 0;
}

#include <stdio.h>

int main() {
    long long N, M;  // N, M을 문제의 조건에 따라 long long 사용
    scanf("%lld %lld", &N, &M);

    long long answer = 0; //최대로 방문 가능한 칸의 수다
    
    //세로가 1인 경우이다.
    if (N == 1) {
        answer = 1;
    } 
    
    //세로가 2인 경우다
    else if (N == 2) {
        // 오른쪽으로 두 칸씩 이동 가능 -> 최대 (M+1)/2번 방문한다
        answer = (M + 1) / 2;
        if (answer > 4) answer = 4; // 4 이상은 4로 제한
    } 
    
    //세로가 3이상인 경우이다. 세로가 3이상이면 모든 4가지 이동 방법이 사용 가능하다.
    else { // N >= 3
        if (M < 7) {
            answer = M < 4 ? M : 4; // 최대 4칸까지만 방문 가능하다
        } else {
            answer = M - 2; // M>=7이면 M-2가 최대 방문 수
        }
    }

    printf("%lld\n", answer);
    return 0;
}

'C언어' 카테고리의 다른 글

2025년 2학기 3주  (0) 2025.09.28
2025년 2학기 2주차  (0) 2025.09.20
2025년 여름학기 9주차 C언어  (0) 2025.08.24
2025년 여름학기 8주차 C언어  (2) 2025.08.17
2025년 여름학기 7주차 C언어  (1) 2025.08.08