4949: The Balance of the World

네르기·2021년 8월 3일
0

알고리즘

목록 보기
4/76

https://www.acmicpc.net/problem/4949

우여곡절

어제 푼 문제랑 거의 비슷해서 쉽게 접근했는데, 2번 틀렸다.
-> https://www.acmicpc.net/problem/9012

  1. ([)]
    처음에 9012번 풀이와 똑같이 (, [가 등장한 횟수를 기록하고 ), ]가 나오면 뺐는데, 그렇게 하니 저 경우에서 막혔다.
  2. (])
    그래서 스택을 도입했고, (랑 [가 나오면 스택에 넣고 ), ]가 나오면 스택에서 뺀 후 스택이 비었는지 확인하는 걸로 했지만, 그렇게 하니 저 경우에서 막혔다.

그래서 )랑 ]도 조건을 만족하지 않으면 스택에 넣었다. 3트만에 성공했다.

남들은 어떻게 했을까

어떻게 하긴.. 원리는 매우 비슷했다. 다만 내 코드가 더 장황했을 뿐.

#include <stdio.h>

char s[101];
int a[101], l;

int main (void)
{
	int i, p;

	while (gets(s))
	{
		if (s[0] == '.') break;

		l = p = 0;

		for (i = 0; s[i]; i++)
		{
			switch (s[i])
			{
			case '(': a[l++] = 1; break;
			case ')': if (!l || a[--l] != 1) p = 1; break;
			case '[': a[l++] = 2; break;
			case ']': if (!l || a[--l] != 2) p = 1;
			}

			if (p) break;
		}

		printf ("%s\n", p || l ? "no" : "yes");
	}
}

-> https://www.acmicpc.net/source/1368160

profile
프로그래머와 애니메이터가 되고파

0개의 댓글