728x90
▶문제 : STL stack (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
'코드업(codeup) > C' 카테고리의 다른 글
코드업(codeup) 4040 : 펜션 C언어 (0) | 2022.01.21 |
---|---|
코드업(codeup) 4654 : 탑 C언어 (0) | 2022.01.20 |
코드업(codeup) 3127 : 수식 계산 1 C언어 (0) | 2022.01.17 |
코드업(codeup) 3715 : 올바른 괄호 3 C언어 (0) | 2022.01.17 |
코드업(codeup) 3129 : 올바른 괄호 2 C언어 (0) | 2022.01.17 |
댓글