article thumbnail image
Published 2022. 11. 11. 22:19

# 자료ꡬ쑰 

10828. μŠ€νƒ (silver 4)

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

λͺ…령은 총 λ‹€μ„― 가지이닀.

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

 

μž…λ ₯

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

 

좜λ ₯

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

 

예제 μž…λ ₯1

14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top

 

예제 좜λ ₯1

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

 

풀이)

λͺ…령에 ν•΄λ‹Ήν•˜λŠ” push, pop, top, size, empty에 ν•΄λ‹Ήν•˜λŠ” ν•¨μˆ˜λ₯Ό μ •μ˜ν•΄μ£Όμ—ˆλ‹€.

push ν•¨μˆ˜μ—μ„œλŠ” number 배열에 μž…λ ₯받은 num을 μΆ”κ°€ν•˜κ³ ,

pop ν•¨μˆ˜μ—μ„œλŠ” 배열에 μ •μˆ˜κ°€ λ“€μ–΄μžˆλŠ” 경우 κ°€μž₯ μ΅œκ·Όμ— push된 μ •μˆ˜λ₯Ό 좜λ ₯ν•˜λ„λ‘ ν•œλ‹€.

top ν•¨μˆ˜μ—μ„œλŠ” 배열에 λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ 있으면 κ°€μž₯ μ΅œκ·Όμ— push된 μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€.

size ν•¨μˆ˜μ—μ„œλŠ” ν˜„μž¬ λ“€μ–΄κ°„ μ •μˆ˜μ˜ κ°œμˆ˜μ— ν•΄λ‹Ήν•˜λŠ” countλ₯Ό 좜λ ₯ν•œλ‹€.

empty ν•¨μˆ˜μ—μ„œλŠ” countκ°€ 0일 λ•Œ, 즉 배열이 λΉ„μ–΄μžˆμœΌλ©΄ 1을 좜λ ₯ν•˜λ„λ‘ ν•œλ‹€.

main ν•¨μˆ˜μ—μ„œλŠ” 크기가 10인 stack 배열을 μ„ μ–Έν•˜κ³ , μž…λ ₯ν•œ 숫자λ₯Ό 넣을 배열에 ν•΄λ‹Ήν•˜λŠ” number배열을 μ„ μ–Έν•΄μ£Όμ—ˆλ‹€.

strcmpν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ 각각의 λ¬Έμžμ—΄μ— λŒ€ν•΄ λ¬Έμžμ—΄μ΄ 동일할 경우 그에 λ§žλŠ” ν•¨μˆ˜λ₯Ό 싀행해주도둝 ν•΄μ£Όμ—ˆλ‹€.

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

int number[100001];
int count = 0;
//push X
void push(int num) {
    number[count] = num;
    count++;
}
//pop
void pop() {
    if (count != 0) {
        count--;
        printf("%d\n", number[count]);
        number[count] = 0;
    }
    else
        printf("%d\n", -1); // λ§Œμ•½ μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯

}
//top
void top() {
    if (count != 0)
        printf("%d\n", number[count - 1]);
    else
        printf("%d\n", -1);  // μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” - 1
}
//size
void size() {
    printf("%d\n", count);
}
void empty() {
    if (count != 0) {
        printf("0\n"); // μŠ€νƒμ΄ λΉ„μ–΄μžˆμ§€ μ•ŠμœΌλ©΄ 0 좜λ ₯
    }
    else {  // μŠ€νƒμ΄ λΉ„μ–΄μžˆμœΌλ©΄ 1 좜λ ₯
        printf("1\n");
    }
}
int main() {
    int n;
    char stack[10];

    scanf("%d", &n);
    
    int number[100];  //μž…λ ₯ν•œ 숫자의 stack λ°°μ—΄ 생성

    for (int i = 0; i < n; i++) {
        scanf("%s", &stack);
        if (strcmp(stack, "push") == 0) {
            int num;    
            scanf("%d", &num);
            push(num);
        }
        else if (strcmp(stack, "pop") == 0) {
            pop();
        }
        else if (strcmp(stack, "top") == 0) {
            top();
        }
        else if (strcmp(stack, "size") == 0) {
            size();
        }
        else if (strcmp(stack, "empty") == 0) {
            empty();
        }
    }
}

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

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