[1] λ¬Έμ
λ¬Έμ
μ μλ₯Ό μ μ₯νλ νλ₯Ό ꡬνν λ€μ, μ
λ ₯μΌλ‘ μ£Όμ΄μ§λ λͺ
λ Ήμ μ²λ¦¬νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
λͺ
λ Ήμ μ΄ μ¬μ― κ°μ§μ΄λ€.
- push X: μ μ Xλ₯Ό νμ λ£λ μ°μ°μ΄λ€.
- pop: νμμ κ°μ₯ μμ μλ μ μλ₯Ό λΉΌκ³ , κ·Έ μλ₯Ό μΆλ ₯νλ€. λ§μ½ νμ λ€μ΄μλ μ μκ° μλ κ²½μ°μλ -1μ μΆλ ₯νλ€.
- size: νμ λ€μ΄μλ μ μμ κ°μλ₯Ό μΆλ ₯νλ€.
- empty: νκ° λΉμ΄μμΌλ©΄ 1, μλλ©΄ 0μ μΆλ ₯νλ€.
- front: νμ κ°μ₯ μμ μλ μ μλ₯Ό μΆλ ₯νλ€. λ§μ½ νμ λ€μ΄μλ μ μκ° μλ κ²½μ°μλ -1μ μΆλ ₯νλ€.
- back: νμ κ°μ₯ λ€μ μλ μ μλ₯Ό μΆλ ₯νλ€. λ§μ½ νμ λ€μ΄μλ μ μκ° μλ κ²½μ°μλ -1μ μΆλ ₯νλ€.
μ λ ₯
첫째 μ€μ μ£Όμ΄μ§λ λͺ
λ Ήμ μ N (1 ≤ N ≤ 2,000,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
[2] μ λ΅
#include <stdio.h>
#include <string.h>
int queue[2000001];
int front = 0;
int rear = -1;
void clean(char arr[]); // μ΄κΈ°νμ© ν¨μ
void push(int x);
void pop(void);
void size(void);
void empty(void);
int main(void) {
int n, i, x;
char command[6];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s", command); // λͺ
λ Ή μ
λ ₯
if (!strcmp(command, "push")) {
scanf("%d", &x);
push(x);
}
else if (!strcmp(command, "pop"))
pop();
else if (!strcmp(command, "size"))
size();
else if (!strcmp(command, "empty"))
empty();
else if (!strcmp(command, "front")) {
if (rear - front + 1 == 0)
printf("%d\n", -1);
else
printf("%d\n", queue[front]);
}
else if (!strcmp(command, "back")) {
if (rear - front + 1 == 0)
printf("%d\n", -1);
else
printf("%d\n", queue[rear]);
}
clean(command); // μ΄κΈ°ν
}
return 0;
}
void clean(char arr[]) {
int i;
for (i = 0; i < 6; i++)
arr[i] = '\0';
}
void push(int x) {
queue[++rear] = x;
}
void pop(void) {
if (rear - front + 1 == 0)
printf("%d\n", -1);
else
printf("%d\n", queue[front++]);
}
void size(void) {
printf("%d\n", rear - front + 1);
}
void empty(void) {
if (rear - front + 1 != 0)
printf("%d\n", 0);
else
printf("%d\n", 1);
}
[3] ν΄μ
# μ½λ λΆμ
1) int queue[2000001];, int front = 0;, int rear = -1;:
- μ μν λ°°μ΄ queueλ₯Ό μ μΈ, μ΄ νλ μ΅λ 2000001κ°μ μμλ₯Ό κ°μ§ μ μλ€.
- frontλ νμ 맨 μμ κ°λ¦¬ν€λ μΈλ±μ€λ₯Ό λνλΈλ€.
- rearλ νμ 맨 λ€λ₯Ό κ°λ¦¬ν€λ μΈλ±μ€λ₯Ό λνλΈλ€.
2) void clean(char arr[]);:
- clean ν¨μλ λ°°μ΄ arrμ μ΄κΈ°ννλ ν¨μ. μ΄ ν¨μλ λͺ¨λ μμλ₯Ό λ λ¬Έμ('\0')λ‘ μ΄κΈ°ννλ€.
3) void push(int x);:
- push ν¨μλ μ μ xλ₯Ό νμ μ½μ νλ ν¨μ. rearλ₯Ό μ¦κ°μν¨ νμ xλ₯Ό rear μμΉμ λ£λλ€.
4) void pop(void);:
- pop ν¨μλ νμμ μμλ₯Ό μ κ±°νκ³ ν΄λΉ μμλ₯Ό μΆλ ₯νλ ν¨μ. λ§μ½ νκ° λΉμ΄μμΌλ©΄ -1μ μΆλ ₯νλ€.
5) void size(void);:
- size ν¨μλ νμ νμ¬ ν¬κΈ°λ₯Ό μΆλ ₯νλ ν¨μ. νμ ν¬κΈ°λ rearμ frontμ μ°¨μ΄μ 1μ λν κ°μ΄λ€.
6) void empty(void);:
- empty ν¨μλ νκ° λΉμ΄μλμ§ μ¬λΆλ₯Ό μΆλ ₯νλ ν¨μ. λ§μ½ νκ° λΉμ΄μμΌλ©΄ 1μ, κ·Έλ μ§ μμΌλ©΄ 0μ μΆλ ₯νλ€.
7) int main(void):
- μ¬μ©μλ‘λΆν° λͺ
λ Ήμ΄μ κ°μ nμ μ
λ ₯λ°λλ€.
- λ°λ³΅λ¬Έμ ν΅ν΄ nλ²μ λͺ
λ Ήμ΄λ₯Ό μ
λ ₯λ°κ³ μ²λ¦¬νλ€.
- κ° λͺ
λ Ήμ΄μ λ°λΌ push, pop, size, empty, front, back λ±μ ν¨μλ₯Ό νΈμΆνμ¬ μμ
μ μννλ€.
# λ¬Έμ μ ν¬μΈνΈ
ν μλ£κ΅¬μ‘° ꡬν:
- queue λ°°μ΄μ μ¬μ©νμ¬ νλ₯Ό ꡬν. frontμ rearλ₯Ό μ¬μ©νμ¬ νμ 맨 μκ³Ό 맨 λ€λ₯Ό κ°λ¦¬ν¨λ€.
[4] μ°Έκ³
https://dalconbox.tistory.com/52
'SWLUG > λ°±μ€ BEAKJOON' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[C] λ°±μ€/BAEKJOON 2566λ²: μ΅λκ° (0) | 2023.11.15 |
---|---|
[C] λ°±μ€/BAEKJOON 15649λ²: Nκ³Ό M (1) (1) | 2023.11.15 |
[C] λ°±μ€ BAEKJOON 10813λ²: 곡 λ°κΎΈκΈ° (0) | 2023.11.07 |
[C] λ°±μ€ BAEKJOON 2798λ²: λΈλμ (1) | 2023.10.06 |
[C] λ°±μ€ BAEKJOON 2577λ²: μ«μμ κ°μ (2) | 2023.10.06 |