[백준 3986] 좋은 단어 (C++)

2023. 10. 12. 17:01·PS/백준 알고리즘[BOJ]
728x90

1. 문제

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

 

3986번: 좋은 단어

이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에

www.acmicpc.net

A와 B를 입력받고 같은 문자끼리 짝을 짓는 문제이다. 이때 아치형 곡선을 그어 서로의 곡선이 겹치지 않게 만든다

 

 

2. 풀이

아치형 곡선을 그어 서로의 곡선이 겹치지 않게 만든다는 말은 다음과 같이 바꿔 해석할 수 있다.

 

  • 홀수 번째 입력받은 A를 ' ( '로, 짝수 번째 입력받은 A를 ' ) '로 치환하여 괄호쌍을 짝짓는 문제로도 볼 수 있다.

마찬가지로 B도

  • 홀수 번째 입력받은 B를 ' [ '로, 짝수 번째 입력받은 B를 ' ] '로 치환하여 괄호쌍을 짝지을 수 있다.

즉 stack을 활용하는 전형적인 괄호쌍문제이다.

 

예시

예를 들어 입력값이 ABAB일 경우 "(   [   )   ]" 로 볼 수 있으므로 짝이 안맞아 좋은 단어가 아니다.

반면에 입력값이 BAABBB인 경우 "[   (   )   [   ]   ]" 로 볼 수 있으므로 짝이 맞아 좋은 단어이다.

 

 

괄호쌍의 자세한 풀이는 "[백준 4949번] 균형잡힌 세상"을 참고하면 더 쉽게 이해할 수 있다.

https://wondrous-developer.tistory.com/2

 

[백준 4949번] 균형잡힌 세상 (C++)

깔끔하게 구현한 최종 코드는 맨 아래에 정리해 두었다. 1. 문제 https://www.acmicpc.net/problem/4949 4949번: 균형잡힌 세상 각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("

wondrous-developer.tistory.com

 

3. 코드

stack의 자료구조를 이용하여 풀어 구현한다.

#include<iostream>
#include<string>
#include<stack>

using namespace std;

stack<char> sta;
string str;

int main(void) {
	cin.tie(0);
	ios::sync_with_stdio(false);
	int T;
	int sum = 0;
	cin >> T;
	while (T--) {
		cin >> str;
		int len = str.length();
		int index = 0;
		while (index < len) {
			if (sta.empty()) {
				sta.push(str[index++]);
				continue;
			}
			if (sta.top() == str[index]) sta.pop();
			else sta.push(str[index]);
			index++;
		}
		if (sta.empty()) sum++;
		while (!sta.empty()) {
			sta.pop();
		}
	}
	cout << sum;
	return 0;
}
728x90

'PS > 백준 알고리즘[BOJ]' 카테고리의 다른 글

[백준 1074번] Z (C++)  (0) 2023.10.18
[백준 10799번] 쇠막대기 (C++)  (0) 2023.10.12
[백준 9012번] 괄호 (C++)  (0) 2023.10.12
[백준 4949번] 균형잡힌 세상 (C++)  (0) 2023.10.12
[백준 17609] 회문 (C++)  (0) 2023.10.09
'PS/백준 알고리즘[BOJ]' 카테고리의 다른 글
  • [백준 10799번] 쇠막대기 (C++)
  • [백준 9012번] 괄호 (C++)
  • [백준 4949번] 균형잡힌 세상 (C++)
  • [백준 17609] 회문 (C++)
BE_개발자
BE_개발자
경이로운 BE 개발자가 되기 위한 프로그래밍 공부 기록장
    250x250
  • BE_개발자
    경이로운 개발일기
    BE_개발자
  • 전체
    오늘
    어제
    • 전체 보기 (213)
      • AI (1)
        • AI native (0)
        • Skill (0)
      • SpringBoot (4)
        • JPA (3)
        • Security (0)
        • 튜토리얼 (1)
        • 기타 (0)
      • Infra (0)
        • Docker (0)
        • AWS (0)
        • NCP (0)
        • GCP (0)
      • React (19)
      • 서버 (0)
      • Computer Science (16)
        • SW Engineering (10)
        • Data Base (2)
        • OS(운영 체제) (4)
      • Data science (0)
        • Probability & Random Variab.. (0)
        • Data Analysis(데이터 분석) (0)
      • 자료구조 | 알고리즘 (57)
        • 선형 자료구죠 (6)
        • 비선형 자료구조 (9)
        • 정렬(Sort) (3)
        • 탐색(Brute Force) (7)
        • 분할 정복(Devide Conquer) (3)
        • 동적 계획법 (6)
        • 탐욕(Greedy) (2)
        • 수학 (7)
        • 심화 알고리즘 (10)
      • PS (44)
        • 백준 알고리즘[BOJ] (38)
        • 프로그래머스[programmers] (3)
      • Dev tool (15)
        • 개발 도구 및 환경 (0)
        • vscode (3)
        • Git Hub (4)
        • Chrome 웹스토어 (5)
        • Python 전용 개발환경 (0)
      • 성장기록 (1)
      • 개인 project (14)
        • 홈페이지 만들기 (11)
        • 냉보미 (1)
      • STL(Standard Library) (9)
      • programming Language (1)
        • javascript (1)
      • 기타 (13)
        • html css (11)
      • (책, 글, 블로그)리뷰 (3)
  • 블로그 메뉴

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

    • 백준
    • Github
    • Notion
    • 서울과학기술대학교 학술동아리 EC
  • 공지사항

  • 인기 글

  • 태그

    완전 탐색
    PS
    분할정복
    스프링부트
    수학
    SW Engineering
    C++
    알고리즘
    백트래킹
    BFS
    stl
    SW 공학
    비트마스킹
    DP
    운영체제
    CS
    괄호쌍
    react
    OS
    스택
    이분 탐색
    프론트엔드
    stack
    재귀함수
    브루트포스
    순열
    탐색
    자료구조
    백준
    그리디
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
BE_개발자
[백준 3986] 좋은 단어 (C++)
상단으로

티스토리툴바