백준 / 스택 / C++

2026. 2. 15. 20:37·coding test - C++/백준
728x90
반응형

 

*문제 출처는 백준에 있습니다.

문제 제목: 스택

문제 사이트: https://www.acmicpc.net/status?user_id=sy9216&problem_id=10828&from_mine=1

스택 성공

시간 제한메모리 제한제출정답맞힌 사람정답 비율
0.5 초 (추가 시간 없음) 256 MB 317737 122805 88715 39.139%

문제

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

  • 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

예제 입력 2 

7
pop
top
push 123
top
pop
top
pop

예제 출력 2 

-1
-1
123
123
-1
-1
 

나의 풀이

#include <stdio.h>

#define MAX (10000 + 500)

int stk[MAX];

int strCompare(const char *a, const char *b) {
	while (*a && *a == *b) a++, b++;
	return *a - *b;
}

int main() {
	int T;
	char command[100];
	int sp = 0;
	scanf("%d", &T);

	for (int i = 0; i < T; i++) {
		scanf("%s", &command);

		if (strCompare(command, "push") == 0) {
			int value;
			scanf("%d", &value);
			stk[sp++] = value;
		}
		else if (strCompare(command, "pop") == 0) {
			if (sp > 0) printf("%d\n", stk[--sp]);
			else printf("%d\n", -1);
		}
		else if (strCompare(command, "size") == 0) {
			printf("%d\n", sp);
		}
		else if (strCompare(command, "empty") == 0) {
			if (sp > 0) {
				printf("%d\n", 0);
			}
			else {
				printf("%d\n", 1);
			}
		}
		else if (strCompare(command, "top") == 0) {
			if (sp > 0) printf("%d\n", stk[sp - 1]);
			else printf("%d\n", -1);
		}


	}
	return 0;
}

 

sp 를 활용해서 구현함

 

sp는 스택의 인덱스를 저장하고...

이 인덱스를 활용해서 코드 구현

 

포인터를 활용한 문자열 비교 코드에 관한 포스팅은 아래에

https://sillon-coding.tistory.com/706

 

C 문자열이 동일한지 비교 (포인터) / C++ strcmp(a, b) 에서 a == b 이면 0 을 반환함 - 아스키코드 차이

파이썬은 엄청 쉬웠는데.. 왜 C로 하필 이런 코딩을 하게됐을까..코딩 많이 될거야..스트레스 많이 받을거야.. 우선 스택 들어 가기 전에 C에서의 문자열 비교 #include int strCompare(const char *a, const cha

sillon-coding.tistory.com

 

 

 

 

+ STL 라이브러리를 활용한 풀이

 

 

#include <stdio.h>
#include <stack>

using namespace std;

int N;
stack<int> stk;

int strCompare(const char *a, const char *b)
{
	while (*a && *a == *b) ++a, ++b;
	return *a - *b;
}

void printStack(stack<int> stk)
{
	while (!stk.empty())
	{
		printf("%d ", stk.top());
		stk.pop();
	}

	putchar('\n');
}

int main()
{
	stk = {};

	scanf("%d", &N);

	for (int i = 0; i < N; i++)
	{
		char command[100];

		scanf("%s", command);

		if (strCompare(command, "push") == 0)
		{
			int value;

			scanf("%d", &value);

			stk.push(value);
		}
		else if (strCompare(command, "pop") == 0)
		{
			if (stk.empty() == false)
			{
				printf("%d\n", stk.top());
				stk.pop();
			}
			else
				printf("-1\n");
		}
		else if (strCompare(command, "size") == 0) 
			printf("%d\n", stk.size());
		else if (strCompare(command, "empty") == 0) 
			printf("%d\n", stk.empty() ? 1 : 0);
		else if (strCompare(command, "top") == 0) 
			printf("%d\n", stk.empty() ? -1 : stk.top());
	}

	return 0;
}

※ 알아야 할 것

- 흑흑흑흑흑흑흐긓긓그흑흐긓그흑흑

- sp 를 활용해서 인덱스로도 구현해보자

 

728x90
반응형

'coding test - C++ > 백준' 카테고리의 다른 글

백준 / 달팽이 / C++  (0) 2026.02.12
백준 / 배열 돌리기 6 - 부분 배열 반전, 회전 / C++  (0) 2026.02.12
백준 / 배열 돌리기 3 - 상하반전, 회전, 그룹 회전 / C++  (1) 2026.02.11
백준 / 배열 돌리기 2 / C++  (0) 2026.02.11
백준 / 배열 돌리기 1 / C++  (0) 2026.02.11
'coding test - C++/백준' 카테고리의 다른 글
  • 백준 / 달팽이 / C++
  • 백준 / 배열 돌리기 6 - 부분 배열 반전, 회전 / C++
  • 백준 / 배열 돌리기 3 - 상하반전, 회전, 그룹 회전 / C++
  • 백준 / 배열 돌리기 2 / C++
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (639)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (304)
        • Programmers (169)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (3)
        • Programmers (11)
        • 백준 (8)
        • 기본기문제 (3)
      • 공부정리 (139)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (3)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (1)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    programmers
    Python
    소수
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
백준 / 스택 / C++
상단으로

티스토리툴바