반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 백준 예산
- express
- 지도자동구축 파이썬
- CRUD
- 소프티어 장애물인식프로그램
- 백준 전쟁 파이썬
- 1987파이썬
- 백준 평범한배낭
- 백준
- 파이썬데이터분석라이브러리
- 백준 A->B
- 백준 전쟁-전투
- 등수매기기 파이썬
- 백준 등수매기기
- 백준알파벳파이썬
- 도커 컨테이너
- 백준 바이러스
- 장애물인식프로그램 파이썬
- 피아노체조 파이썬
- MySQL완전삭제
- MongoDB
- 백준 점프 파이썬
- 백준 피아노체조
- jenkins
- 금고털이 파이썬
- express mongodb
- 백준 점프
- 소프티어 지도자동구축
- 파이썬 평범한배낭
- 프로그래머스
Archives
- Today
- Total
바위 뚫는중
[SWEA] 1232. 사칙연산 Java 본문
반응형
D4 - 도움많이받고품 ^^,,
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV141J8KAIcCFAYD
package swea1232;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
//기본 클래스
public class Solution {
//사용할 Node 클래스 만들어줌
static class Node {
int value;
char opr;
int left = -1, right = -1;
// 생성자
public Node(int value, char opr, int left, int right) {
this.value = value;
this.opr = opr;
this.left = left;
this.right = right;
}
} //end Node
static int N; // 노드개수
static int result; // 계산결과
static Node[] nodes; // 위에 만들어준 Node 타입의 배열 선언
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
//10개의 테케 입력받기
for (int test_case = 1; test_case <= 10; test_case++) {
N = Integer.parseInt(br.readLine()); // 노드개수
nodes = new Node[N + 1];//배열은 0부터 시작하지만, 노드는 1부터 시작하기 떄문
/*
* 정점이 정수면 정점 번호와 양의 정수가 주어지고,
* 정점이 연산자이면 정점 번호, 연산자, 해당 정점의 왼쪽 자식, 오른쪽 자식의 정점 번호가 차례대로 주어진다.
*/
// 트리 입력받기
for (int i = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine(), " ");
int nowNodeIdx = Integer.parseInt(st.nextToken());
String valueOrOperator = st.nextToken(); //값인지 연산자인지 구분해줌
//연산자 중 하나라면??
if (valueOrOperator.equals("+") || valueOrOperator.equals("-") || valueOrOperator.equals("*") || valueOrOperator.equals("/")) {
char opr = valueOrOperator.charAt(0);
int left = Integer.parseInt(st.nextToken());
int right = Integer.parseInt(st.nextToken());
nodes[nowNodeIdx] = new Node(0, opr, left, right);
}
// 값이라면?
else {
int value = Integer.parseInt(valueOrOperator);
nodes[nowNodeIdx] = new Node(value, ' ', -1, -1);
}
}
System.out.printf("#%d %d\\n", test_case, calc(nodes[1])); //트리의루트노드에서 부터 시작
}
br.close();
}
///재귀적으로 호출하게 될 계산함수들
private static int calc(Node node) {
if (node.opr != ' ') {
switch (node.opr) {
case '+':
return calc(nodes[node.left]) + calc(nodes[node.right]);
case '-':
return calc(nodes[node.left]) - calc(nodes[node.right]);
case '*':
return calc(nodes[node.left]) * calc(nodes[node.right]);
case '/':
return calc(nodes[node.left]) / calc(nodes[node.right]);
default:
return 0;
}
} else {
return node.value;
}
}
}
반응형
'Algorithms' 카테고리의 다른 글
[이코테] 탐색 DFS/BFS - 음료수 얼려먹기, 미로탈출 Python (0) | 2023.09.27 |
---|---|
[BOJ] 백준 1931. 회의실 배정 Java , Comparator 사용 (0) | 2023.07.19 |
[BOJ] 큐 문제 - 11866 요세푸스 문제 0, 1966 프린터 큐 (0) | 2023.02.04 |
[BOJ] 큐 문제 - 18258 큐 2, 2164 카드2 Python3 (0) | 2023.01.30 |
[BOJ] 스택문제 - 1874 스택 수열, 4949 균형잡힌 세상 Python3 (0) | 2023.01.29 |