본문 바로가기
코드업(codeup)/C

[코드업(codeup)/C]코드업(codeup) 3102 : STL stack C언어

by starfish22 2022. 1. 17.
728x90

▶문제 : STL stack (codeup.kr)

 

STL stack

명령어에 따라 동작결과를 순서대로 출력한다. push와 pop은 출력되는 결과가 없음에 유의한다.

codeup.kr

 

▶코드 작성

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

int number(char *s)//push할 때 숫자 반환
{
    s = s + 6;//숫자가 있는 부분까지 포인터 주소 앞당김
    char *temp = strchr(s, ' ');//숫자가 끝나고 띄어쓰기가 나올 때
    temp[0] = '\0';//null문자로 바꿈
    return atoi(s);//정수로 반환
}

int main()
{
    int n;
    char cmd[200][13];
    int stack[200] = {0};
    int cnt = 0;

    scanf("%d", &n);

    for (int i = 0; i < n; i++) {
        scanf(" %[^\n]s", cmd[i]);//%앞에 한 칸 띄어주기
    }

    for (int i = 0; i < n; i++)
    {
        if (strncmp(cmd[i], "push", 4) == 0)
        {
            stack[cnt++] = number(cmd[i]);//함수호출로 숫자 반환
        }
        else if (strncmp(cmd[i], "top", 3) == 0)
        {
            if (cnt == 0) printf("-1\n");
            else printf("%d\n", stack[cnt - 1]);//맨 위 숫자 출력
        }
        else if (strncmp(cmd[i], "pop", 3) == 0 && cnt > 0) cnt--;
        else if (strncmp(cmd[i], "size", 4) == 0) printf("%d\n", cnt);
        else if (strncmp(cmd[i], "empty", 5) == 0)
        {
            if (cnt == 0) printf("true\n");
            else printf("false\n");
        }
    }

    return 0;
}

 

▶해석

scanf로 입력받을 때 정수 입력받고 문자를 입력받으려면 % 앞에 띄어쓰기를 넣어서 개행 문자 \n를 무시해준다.

입력받은 문자들은 strncmp함수로 각 문자에 맞게 작성하였다.

push부분은 특히 괄호안에 있는 숫자를 구해야 하므로 number함수로 'push( '길이에 맞게 +6을 해주고 temp포인터로 strchr함수를 이용해 띄어쓰기를 찾아 null문자로 바꾼 후 atoi함수로 정수로 변환하여 반환하였다.

728x90

댓글