#69. [백준_C언어] 4889 : 안정적인 문자열 \ 자료구조

 

입력 코드

#include <stdio.h>

int main(void)
{
	int i, j;
	int s2 = 0, cnt = 0, length = 0;
	char str[2000];
	char c;
	for (i = 1; ; i++) {
		length = 0;
		while (1) {
			scanf("%c", &c);
			if (c == '-') {
				cnt = -1;
				break;
			}
			if (c == '\n')
				break;
			str[length] = c;
			length++;	
		}
		if (cnt == -1)
			break;
		if (length == 0) {
			printf("%d. 0\n", i);
			continue;
		}
		s2 = 0, cnt = 0;
		for (j = length - 1; j >= 0; j--) {
			if (str[j] == '{') {
				if (s2 == 0) {
					cnt++;
					s2++;
				}
				else
					s2--;
			}
			else
				s2++;
		}
		printf("%d. %d\n", i, cnt + (s2 / 2));
	}
    return 0;
}

출처 www.acmicpc.net/source/20711323

 

#include <stdio.h>
#include <string.h>

int main() {
  int len, top, i = 0, cnt;
  char s[2001], stack[2001];
  
  while(1) {
    scanf("%s", s);
    if(s[0] == '-') break;
    i++;
    len = strlen(s);
    cnt = top = 0;
    for(int i = 0; i < len; i++) {
      if(s[i] == '{')
        stack[top++] = '{';
      else if(s[i] == '}') {
        if(stack[top - 1] == '{')
          top--;
        else stack[top++] = '}';
      }
    }
    while(top) {
      if(stack[(top--) - 1] == stack[(top--) - 1])
        cnt++;
      else cnt += 2;
    }
    printf("%d. %d\n", i, cnt);
  }
  return 0;
}

출처 www.acmicpc.net/source/26207922

 

 

코드 설명

#자료구조 #그리디 알고리즘 #문자열 #스택

 

 

 

문제 출처

www.acmicpc.net/problem/4889

 

4889번: 안정적인 문자열

입력은 여러 개의 데이터 세트로 이루어져 있다. 각 데이터 세트는 한 줄로 이루어져 있다. 줄에는 여는 괄호와 닫는 괄호만으로 이루어진 문자열이 주어진다. 문자열의 길이가 2000을 넘는 경우

www.acmicpc.net