Problem Solving/SW Expert Academy

[SWEA] 1233 사칙연산 유효성 검사 (C++)

LeeJaeJun 2024. 1. 27. 22:30
728x90
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV141176AIwCFAYD

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

문제 접근

이진 트리에서 부모 노드에는 항상 연산자 기호가 있어야 하고, 리프 노드에는 항상 양의 정수가 있어야지 계산이 가능하다고 판단할 수 있습니다. 인덱스가 1부터 시작한다고 하였을 때, 리프 노드는 (전체 노드의 수 / 2)의 내림값 보다 큰 인덱스에 위치하는 노드들이고, non-leaf 노드들은 1부터 (전체 노드의 수 / 2)의 내림값까지의 인덱스에 해당하는 노드들이라는 것을 이용하여 문제를 풀었습니다.

입력값을 보았을 때는 트리를 모두 구현하고 판별하라는 의도인 것 같은데, 굳이 그렇게 안하도 풀 수 있었기에 필요없는 입력값은 trash로 입력받아 처리해버렸습니다.

 

노랑: non-leaf node 회색: leaf-node

구현 코드
#include<iostream>

using namespace std;

bool isOper(char c){
    if(c == '+' || c == '-' || c == '*' || c == '/')
        return true;
    return false;
}

int main(int argc, char** argv)
{
	int test_case;
	int T = 10;
	int num_node;
    int idx;
    char data;
    bool result;
    int trash;

	for(test_case = 1; test_case <= T; ++test_case)
	{
        cin >> num_node;
        result = 1;
        for(int i = 1; i <= num_node; i++){
            cin >> idx >> data;

            if(i <= num_node / 2){
                if(data >= '0' && data <= '9'){
                    result = 0;
                } 
                if(i == num_node/2 && num_node % 2 == 0)
                    cin >> trash;
                else cin >> trash >> trash;

            }else{
                if(!(data>= '0' && data <= '9')) {
                    result = 0;
                }
            }
        }

        cout << "#" << test_case << " " << result << '\n';
	}
	return 0;//정상종료시 반드시 0을 리턴해야합니다.
}

 

728x90
반응형

'Problem Solving > SW Expert Academy' 카테고리의 다른 글

[SWEA] 3000. 중간값 구하기  (0) 2024.02.13
[SWEA] 1251 하나로  (1) 2024.02.06
[SWEA] 1248 공통조상 (c++)  (1) 2024.01.30
[SWEA] 1232 사칙연산(c++)  (0) 2024.01.30
[SWEA] 1230 암호문3 (C++)  (0) 2024.01.27