개발/Boj
Boj -1541 / java
바이솔
2024. 7. 15. 17:31
문제
내 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String[] mSplit = str.split("-");
int length = mSplit.length;
int result =0;
int isMinus =1;
for(int j=0;j<length;j++){
if(j%2 == 1 ){
isMinus = -1;
}
String[] pSplit = mSplit[j].split("\\+");
int pResult =0;
for(int i=0;i<pSplit.length;i++){
pResult += Integer.parseInt(pSplit[i]);
}
result += pResult*isMinus;
}
System.out.print(result);
}
}
풀이
이 프로그램은 그리디 알고리즘을 사용해 문자열로 주어진 수식을 계산하는 방식이다. 그리디 알고리즘은 매 순간 최적의 선택을 하여 전체 문제를 해결하는 방법을 의미한다. 이 프로그램에서는 수식에서 '-' 기호를 기준으로 문자열을 분리하고, 각 부분을 처리하는 방식으로 그리디 접근을 구현했다.
- 입력 받기:
- 사용자가 입력한 수식을 읽어온다.
- '-' 기호로 분리:
- 입력된 수식을 '-' 기호를 기준으로 분리한다. 이렇게 하면 덧셈과 뺄셈으로 이루어진 부분 문자열들이 생성된다. 분리된 부분 문자열들을 배열에 저장한다.
- 배열 요소 처리:
- 각 부분 문자열을 처리하기 위해 반복문을 사용한다. 배열의 각 요소를 순차적으로 처리하면서, 짝수 번째 요소는 덧셈으로, 홀수 번째 요소는 뺄셈으로 간주한다. 홀수 번째 요소를 만날 때마다 뺄셈 연산을 위해 변수를 설정한다.
- # isMinus : 현재 계산하고 있는 부분이 음수 파트라면 -1, 양수라면 1
- '+' 기호로 재분리:
- 내부적으로는 '+' 기호를 기준으로 다시 분리하여 각 숫자를 더한 후 최종 결과에 더하거나 뺀다. 이렇게 하면 '-' 기호 뒤에 있는 값들은 가능한 큰 음수로 처리되어 최종 결과를 최소화하게 된다.
# 헷갈렸던 부분
: +를 올바르게 인식하기 위해서는 \\+로 이스케이프 처리해야 함