article thumbnail image
Published 2022. 11. 12. 03:51

# 자료ꡬ쑰

10845. 큐

μ •μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” 큐λ₯Ό κ΅¬ν˜„ν•œ λ‹€μŒ, μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” λͺ…령을 μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

λͺ…령은 총 μ—¬μ„― 가지이닀.

  • push X: μ •μˆ˜ Xλ₯Ό 큐에 λ„£λŠ” 연산이닀.
  • pop: νμ—μ„œ κ°€μž₯ μ•žμ— μžˆλŠ” μ •μˆ˜λ₯Ό λΉΌκ³ , κ·Έ 수λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ 큐에 λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.
  • size: 큐에 λ“€μ–΄μžˆλŠ” μ •μˆ˜μ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.
  • empty: 큐가 λΉ„μ–΄μžˆμœΌλ©΄ 1, μ•„λ‹ˆλ©΄ 0을 좜λ ₯ν•œλ‹€.
  • front: 큐의 κ°€μž₯ μ•žμ— μžˆλŠ” μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ 큐에 λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.
  • back: νμ˜ κ°€μž₯ 뒀에 μžˆλŠ” μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ 큐에 λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.

 

μž…λ ₯

첫째 쀄에 μ£Όμ–΄μ§€λŠ” λͺ…λ Ήμ˜ 수 N (1 ≤ N ≤ 10,000)이 μ£Όμ–΄μ§„λ‹€. λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” λͺ…령이 ν•˜λ‚˜μ”© μ£Όμ–΄μ§„λ‹€. μ£Όμ–΄μ§€λŠ” μ •μˆ˜λŠ” 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , 100,000보닀 μž‘κ±°λ‚˜ κ°™λ‹€. λ¬Έμ œμ— λ‚˜μ™€μžˆμ§€ μ•Šμ€ λͺ…령이 μ£Όμ–΄μ§€λŠ” κ²½μš°λŠ” μ—†λ‹€.

 

좜λ ₯

좜λ ₯ν•΄μ•Όν•˜λŠ” λͺ…λ Ήμ–΄ μ£Όμ–΄μ§ˆ λ•Œλ§ˆλ‹€, ν•œ 쀄에 ν•˜λ‚˜μ”© 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯1

15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front

예제 좜λ ₯1

1
2
2
0
1
2
-1
0
1
-1
0
3

 

 

 

풀이

μŠ€νƒμ„ λ§Œλ“  λ¬Έμ œμ™€ λΉ„μŠ·ν•˜κ²Œ μ§„ν–‰ν–ˆλ‹€. 이에 λ”ν•΄μ„œ κ°€μž₯ μ•žμ˜ μ›μ†ŒμΈ front와 κ°€μž₯ λ’· μ›μ†ŒμΈ rear을 μ •μ˜ν•΄μ£Όμ—ˆλ‹€.

push ν•¨μˆ˜μ—μ„œλŠ” λ§ˆμ§€λ§‰ μ›μ†Œ 뢀뢄에 dataλ₯Ό μΆ”κ°€ν•œλ‹€.

pop ν•¨μˆ˜μ—μ„œλŠ” λ§Œμ•½ front와 rear이 같은 경우 큐가 빈 κ²ƒμ΄λ―€λ‘œ return -1을 ν•΄μ€€λ‹€. κ·Έ μ™Έμ˜ κ²½μš°μ—λŠ” 맨 μ•žμ˜ μ›μ†Œλ₯Ό μ œκ±°ν•œλ‹€.

size ν•¨μˆ˜μ—μ„œλŠ” rearμ—μ„œ frontλ₯Ό λΉΌμ„œ 큐의 크기λ₯Ό λ°˜ν™˜ν•œλ‹€.

empty ν•¨μˆ˜μ—μ„œλŠ” front와 rear의 값이 같은 κ²½μš°μ— 큐가 빈 κ²ƒμ΄λ―€λ‘œ μ΄λ•Œ 1을 λ°˜ν™˜ν•˜κ³  κ·Έ μ™Έμ˜ κ²½μš°μ—λŠ” 0을 λ°˜ν™˜ν•œλ‹€.

front_print ν•¨μˆ˜μ—μ„œλŠ” 큐가 λΉ„μ—ˆμ„ λ•ŒλŠ” -1을 λ°˜ν™˜ν•˜κ³  κ·Έ μ™Έμ˜ κ²½μš°μ—λŠ” κ°€μž₯ 첫 번째의 μ›μ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€.

back_print ν•¨μˆ˜μ—μ„œλŠ” 큐가 λΉ„μ—ˆμ„ λ•ŒλŠ” -1을 λ°˜ν™˜ν•˜κ³  κ·Έ μ™Έμ˜ κ²½μš°μ—λŠ” λ§ˆμ§€λ§‰ μ›μ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€.

 

main ν•¨μˆ˜μ—μ„œλŠ” strcmpν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ λ¬Έμžμ—΄μ„ λΉ„κ΅ν•΄μ„œ κ·Έ 값이 1인 경우 그에 λ§žλŠ” ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ„λ‘ ν–ˆλŠ”λ°, μ΄λ•Œ λ°˜ν™˜κ°’μ΄ 1일 λ•Œ μ‹€ν–‰λ˜κΈ° μœ„ν•΄ !도 μ•žμ— λΆ™μ—¬μ£Όμ—ˆλ‹€.

#include<stdio.h>
#include<string.h>

int queue[10001];
int front = -1, rear = -1;

void push(int data) {
    queue[++rear] = data;
}

int pop() {
    if(front == rear) {
        return -1;
    } else {
        return queue[++front];
    }
}

int size() {
    return rear - front;
}

int empty() {
    if(front == rear) {
        return 1;
    } else {
        return 0;
    }
}

int front_print() {
    if(front == rear) {
        return -1;
    } else {
        return queue[front + 1];
    }
}

int back_print() {
    if(front == rear) {
        return -1;
    } else {
        return queue[rear];
    }
}

int main() {
    int n;
    scanf("%d", &n);    // λͺ…λ Ήμ˜ 수

    for(int i = 0; i < n; i++) {
        char c[6];
        scanf("%s", c);

        if(!strcmp(c, "push")) {
            int data;
            scanf("%d", &data);
            push(data);
        } else if(!strcmp(c, "pop")) {
            printf("%d\n", pop());
        } else if(!strcmp(c, "size")) {
            printf("%d\n", size());
        } else if(!strcmp(c, "empty")) {
            printf("%d\n", empty());
        } else if(!strcmp(c, "front")) {
            printf("%d\n", front_print());
        } else {
            printf("%d\n", back_print());
        }
    }

    return 0;
}

'λ°±μ€€ > C' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[C] λ°±μ€€ 18258번  (1) 2022.11.12
[C] λ°±μ€€ 10828번  (0) 2022.11.11
[C] λ°±μ€€ 1065번  (0) 2022.11.11
[C] λ°±μ€€ 2164번  (0) 2022.05.24
[C] λ°±μ€€_ 7568번  (0) 2022.05.16
λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€!