아무거나 내꺼 공부할래
올바른 괄호(stack) / c / 제한시간 없음 본문
▣ 문제
괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다. (())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
▣ 입력설명
- 첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
▣ 출력설명
- 첫 번째 줄에 YES, NO를 출력한다.
▣ 입력 예시
(()(()))(() |
()()(()()) |
▣ 출력 예시
NO |
YES |
<내 코드>
#pragma warning(disable:4996)
#include <stdio.h>
int stack[30];
int top = -1;
void push(int x) {
stack[++top] = x;
}
void pop() {
stack[top--];
}
int main() {
char str[30];
scanf("%s", str);
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == ')') {
pop();
if (top < -1) {
printf("NO\n");
return 0;
}
}
else {
push(1);
}
}
if (top == -1) {
printf("YES\n");
return 0;
}
printf("NO\n");
return 0;
}
'(' 가 나오면 push, ')' 가 나오면 pop을 해준다.
for 문 중간에 ')'이 더 많이 나오거나 먼저 나오면 올바른 괄호가 되지 않기 때문에 top > -1 이란 조건문을 사용했다.
for 문이 다 돌고 stack이 비어있으면 올바른 괄호이고 '(' 이 남아있다면 잘못된 괄호이다.
.
c++에서는 .empty() 같은 내장 함수가 많아서 바로 쓸수 있지만
c에는 empty함수를 선언하고 직접 만들어서 짜야함
좀 더 체계적으로 짜려면 empty같은 함수를 위에 선언하고 하는게 나을듯
'[c언어&c++] 알고리즘 공부 > 인프런(Inflearn)' 카테고리의 다른 글
부분집합(MS 인터뷰, DFS:완전탐색) / c / 제한시간 없음 (0) | 2021.02.02 |
---|---|
기차운행(stack 응용) / c / 제한시간 없음 (0) | 2021.02.01 |
영지 선택(2차원 배열 구간합, DP) / c / 제한시간 : 1초 (0) | 2021.01.29 |
멀티태스킹(카카오 '먹방' 문제 변형) / c / 제한시간 없음 (0) | 2021.01.28 |
공주 구하기(요세푸스 문제) / c / 제한시간 없음 (0) | 2021.01.28 |