
내가 생각했을때 문제에서 원하는부분
수의 개수 N(1 ≤ N ≤ 10) 이 주어지고 다음 2N-1 개의 줄에는 수와 연산자(+, -, *, /) 가 번갈아서 들어온다.
첫째 줄에 계산이 끝난 후 수를 출력한다.
내가 이 문제를 보고 생각해본 부분
N은 수의 개수이다.
이 값에 따라 연산자와 숫자가 몇 번 입력될지를 결정한다.
opt는 연산자를 저장하는 리스트이고,
list는 숫자를 저장하는 리스트이다.
첫 번째 숫자를 list에 추가한다.
N이 1보다 클 동안 반복한다.
각 반복에서 연산자와 다음 숫자를 읽는다.
+ 또는 - 연산자는 단순히 리스트에 숫자를 추가하고,
연산자도 함께 저장한다.
마지막 숫자와 다음 숫자를 곱한다.
pollLast() 메서드는 리스트의 마지막 요소를 꺼내고,
그 값을 곱한 후 결과를 리스트에 추가해준다.
두 숫자의 부호가 다르면,
나눗셈을 수행하기 전에 next.subtract(BigInteger.ONE)을 통해 1을 빼고,
이를 subtract 연산에 사용합니다. 이는 소수점 내림 처리를 위한 방법이다.
두 숫자의 부호가 같으면 단순히 나누기만 수행한다.
리스트의 첫 번째 숫자를 BI에 저장한다.
연산자 리스트를 순회하면서 각 연산자를 기반으로 최종 결과를 계산한다.
+는 더하고, -는 빼는 방식으로 처리한다.
코드로 구현
package baekjoon.baekjoon_24;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.util.LinkedList;
// 백준 2408번 문제
public class Main822 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
LinkedList<Character> opt = new LinkedList<>();
LinkedList<BigInteger> list = new LinkedList<>();
list.push(new BigInteger(br.readLine()));
while(N --> 1) {
char nextOpt = br.readLine().charAt(0);
BigInteger next = new BigInteger(br.readLine());
if(nextOpt == '+' || nextOpt == '-') {
list.add(next);
opt.add(nextOpt);
} else if(nextOpt == '*') {
list.add(list.pollLast().multiply(next));
} else {
if(list.getLast().compareTo(BigInteger.ZERO) != next.compareTo(BigInteger.ZERO)) {
list.add(list.pollLast().subtract(next.subtract(BigInteger.ONE)).divide(next));
} else {
list.add(list.pollLast().divide(next));
}
}
}
BigInteger BI = list.get(0);
for(int i = 0; i < opt.size(); i++) {
if(opt.get(i) == '+') {
BI = BI.add(list.get(i + 1));
} else {
BI = BI.subtract(list.get(i + 1));
}
}
bw.write(BI.toString());
bw.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.