본문 바로가기
Programming/Algorithm

swe 1218 괄호 짝짓기

by OKOK 2018. 3. 29.

1. 아이디어를 떠올리고, 그것을 토대로 설계를 합니다.

단, 그 아이디어가 쉬운 예제에서 뿐만 아니라 실제 예제에서도 돌아가는지 확인할 필요가 있습니다. 


/*

1218 괄호 짝짓기 문제 시작합니다.

1523분 시작합니다.


괄호들의 짝이 맞는지 확인하기.


*/


#include <iostream>

#include <string>

#include <memory.h>

using namespace std;


string str;

int ans = 1;

int map[4];

int length;


void problemIn() {

cin >> str;

}


void solve() {

length = str.size();

for (int i = 0; i < length; i++) {

if (str[i] == '(') {

if (map[0] >= 0) { map[0]++; }

else {

ans = 0;

return;

}

}

else if (str[i] == ')') {

if (map[0] >= 1) { map[0]--; }

else {

ans = 0;

return;

}

}

else if (str[i] == '[') {

if (map[1] >= 0) { map[1]++; }

else {

ans = 0;

return;

}

}


else if (str[i] == ']') {

if (map[1] >= 1) { map[1]--;}

else {

ans = 0;

return;

}

}


else if (str[i] == '{') {

if (map[2] >= 0) { map[2]++;}

else {

ans = 0;

return;

}

}


else if (str[i] == '}') { 

if (map[2] >= 1) { map[2]--; }

else {

ans = 0;

return;

}

}


else if (str[i] == '<') {

if (map[3] >= 0) { map[3]++;}

else {

ans = 0;

return;

}

}


else if (str[i] == '>') {

if (map[3] >= 1) { map[3]--;}

else {

ans = 0;

return;

}

}

}

}


int main() {

for (int tc = 1; tc <= 10; tc++) {

int a;

cin >> a;

problemIn();


solve();

cout << "#" << tc << " " << ans << endl;

memset(map, 0, sizeof(map));

ans = 1;

}

return 0;