[SWEA] #1233 - 사칙연산 유효성 검사
2022. 3. 15. 18:48
728x90
반응형
💡 출처
https://swexpertacademy.com/main/code/problem/problemSolver.do?contestProbId=AV141176AIwCFAYD
💡 문제
[설명]
사칙연산으로 구성되어 있는 식은 이진 트리로 표현할 수 있다.
아래는 식 “(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 |