• 티스토리 홈
  • 프로필사진
    학페
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
학페
  • 프로필사진
    학페
    • 분류 전체보기 (38)
      • Baekjoon Online Judge (30)
        • C++ (30)
      • Data structure & Algorithm (7)
      • Java (1)
        • Java Spring (0)
        • Spring 공부하며 정리하는 개념들 (1)
      • Open API (0)
      • 일상 이야기 (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • BOJ - 정규형 (4882번)
        2025년 03월 23일
        • 학페
        • 작성자
        • 2025.03.23.:39

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

         

        스택을 활용하여 문제를 해결했습니다.

         

        이 문제에서 주의해야 할 점은 "가장 낮은 레벨에 있는 트리는 AND 트리이다." 라는 것 입니다.

        보통의 트리 구조에서 낮은 레벨이라 하면 루트노드의 레벨을 뜻하지만, 보통의 트리 구조에서 가장 높은 레벨의 트리가 이 문제에서는 가장 낮은 레벨이 됩니다.

         

        주어진 트리의 최대 레벨을 구하고 닫는 괄호가 나올 시, AND와 OR을 구분하는 과정을 통해 답을 도출해 나아갔습니다.

         

        위의 특징과 입력으로 주어지는 괄호들을 적절히 조합하여 아래의 코드를 작성하였습니다.

        더보기
        #include <iostream>
        #include <map>
        #include <string>
        #include <cstring>
        #include <stack>
        #include <vector>
        using namespace std;
        int getMaxLevel(string str);
        int main() {
        	cin.tie(NULL);
        	ios_base::sync_with_stdio(false);
        	int leftCount = 0, andHasFalse = 0, orHasTrue = 0,
        		progressCount = 1, maxLevel = 0;
        	string input;
        	while (true)
        	{
        		stack<char>st;
        		cin >> input;
        		if (input == "()")
        			break;
        		leftCount = 0;
        		maxLevel = getMaxLevel(input);
        		for (int i = 0; i < input.length(); i++)
        		{
        			andHasFalse = 0, orHasTrue = 0;
        			if (input[i] == '(') {
        				leftCount++;
        				st.push(input[i]);
        			}
        			else if (input[i] == 'F' || input[i] == 'T') {
        				st.push(input[i]);
        			}
        			else {
        				string temp = "";
        				while (st.top() != '(') {
        					temp.push_back(st.top());
        					st.pop();
        				}
        				st.pop();
        				if ((maxLevel - leftCount) % 2 == 0) {
        					//AND연산
        					for (int i = 0; i < temp.length(); i++)
        					{
        						if (temp[i] == 'F') {
        							andHasFalse = 1;
        							st.push('F');
        							break;
        						}
        					}
        					if (!andHasFalse)
        						st.push('T');
        				}
        				else {
        					//OR연산
        					for (int i = 0; i < temp.length(); i++)
        					{
        						if (temp[i] == 'T') {
        							orHasTrue = 1;
        							st.push('T');
        							break;
        						}
        					}
        					if (!orHasTrue)
        						st.push('F');
        				}
        				leftCount--;
        			}
        		}
        		if (st.top() == 'T')
        			cout << progressCount << ". true\n";
        		else
        			cout << progressCount << ". false\n";
        		progressCount++;
        	}
        	return 0;
        }
        int getMaxLevel(string str) {
        	int leftCnt = 0, maxLevel = 0;
        	for (int i = 0; i < str.length(); i++)
        	{
        		if (str[i] == '(') {
        			leftCnt++;
        			maxLevel = max(maxLevel, leftCnt);
        		}
        		else if (str[i] == ')')
        			leftCnt--;
        	}
        	return maxLevel;
        }

         

         

        'Baekjoon Online Judge > C++' 카테고리의 다른 글

        BOJ - 녹색 옷 입은 애가 젤다지? (4485번)  (0) 2025.03.31
        BOJ - 같은 수로 만들기 2 (13146번)  (0) 2025.03.26
        BOJ - 영단어 암기는 괴로워 (20920번)  (0) 2024.12.16
        BOJ - 풍선 터뜨리기 (2346번)  (0) 2024.12.09
        BOJ - 덱 2 (28279번)  (0) 2024.12.08
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바