[SWEA] #1233 - 사칙연산 유효성 검사

2022. 3. 15. 18:48
728x90
반응형

※ 문제에 대한 저작권은 SW Expert Academy에 있습니다.

💡 출처


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

 

SW Expert Academy

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

swexpertacademy.com

 

💡 문제


[설명]

사칙연산으로 구성되어 있는 식은 이진 트리로 표현할 수 있다.

아래는 식 “(8/2)*(6-4)”을 이진 트리로 표현한 것이다.

임의의 정점에 연산자가 있으면 해당 연산자의 왼쪽 서브 트리의 결과와 오른쪽 서브 트리의 결과를 사용해서 해당 연산자를 적용한다.

 

 
사칙연산 “+, -, *, /”와 양의 정수로만 구성된 임의의 이진 트리가 주어질 때, 이 식의 유효성을 검사하는 프로그램을 작성하여라.

여기서 말하는 유효성이란, 사칙연산 “+, -, *, /”와 양의 정수로 구성된 임의의 식이 적절한 식인지를 확인하는 것으로, 계산이 가능하다면 “1”, 계산이 불가능할 경우 “0”을 출력한다.


(단, 계산이 가능한지가 아닌 유효성을 검사하는 문제이므로 0으로 나누는 경우는 고려하지 않는다.)
 

       
[연산이 가능한 경우]
   [연산이 불가능한 경우]

 

💡 아이디어


연산의 특징에 대해서 생각하면 쉽게 풀 수 있는 문제이다.

연산이 가능하려면 연산자에 피연산자 2개가 붙어 있어야 연산이 수행될 수 있다.

그렇기 때문에 입력을 받으면서 연산자임에도 불구하고, 피연산자가 존재하지 않는 경우(리프노드)에는

연산이 불가능하다고 판단할 수 있다.  

 

💡 소스코드


package SWEA;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;

public class SWEA_P1233_사칙연산_유효성_검사 {

	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("./SWEA_INPUT/SWEA_P1233_input.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		for (int TC = 1; TC <= 10; TC++) {
			int flag = 1;
			int T = Integer.parseInt(br.readLine());

			for (int i = 0; i < T; i++) {
				String[] s = br.readLine().split(" ");

				if (!Character.isDigit(s[1].charAt(0)) && s.length == 2)//연산자가 들어왔는데 리프노드라면
					flag = 0;//flag를 0으로 설정
			
				else
					continue;//for문을 다 돌아야 다음 케이스로 넘어갈 수 있기 때문에 continue;
			}

			System.out.println("#" + TC + " " + flag);//출력
		}
		br.close();
	}
}

 

💡 결과


728x90
반응형

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

[SWEA] #1238 - Contact  (0) 2022.03.16
[SWEA] #1234 - 비밀번호  (0) 2022.03.16
[SWEA] #1232 - 사칙연산  (0) 2022.03.15
[SWEA] #1231 - 중위순회  (0) 2022.03.15
[SWEA] #1226 - 미로1  (0) 2022.03.15

BELATED ARTICLES

more