✔ 잃어버린 괄호
문제 분석하기
가장 작은 최솟값을 만들기 위해서는 가능한 큰 수를 빼야 하므로
더하기에 해당하는 부분에 괄호를 쳐서 먼저 모두 계산한 후 빼기를 실행하도록 함
손으로 풀어보기
- 더하기 연산을 실행
- 가장 앞에 있는 값에서 더하기 연산으로 나온 결괏값들을 모두 뺌
예) 100 - 40 + 50 + 74 - 30 + 29 - 45 + 43 + 11
100 - (40 + 50 + 74) - (30 + 29) - (45 + 43 + 11)
100 - 164 - 59 - 99 = -222
슈도코드 작성하기
answer(정답 변수)
들어온 데이터를 "-" 기호를 기준으로 split 수행하기
for(나눠진 데이터 개수만큼 반복하기) {
결괏값 = mySum() 함수 수행하기
if(가장 앞 데이터일 때) answer에 결괏값 더하기
else answer에 결괏값 빼기
}
answer 출력하기
mySum() 함수 구현하기 {
현재 들어온 String 값을 "+" 기호 기준으로 split 수행하기
for(나눠진 데이터 개수만큼 반복하기) {
String 값을 Integer형으로 변환해 리턴값에 더하기
}
전체 합 리턴하기
}
코드 구현하기
/**
* 1541) 잃어버린_괄호
*/
public class D036_1541 {
// answer(정답 변수)
static int answer = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 들어온 데이터를 "-" 기호를 기준으로 split 수행하기
String example = sc.nextLine();
String[] str = example.split("-");
for (int i = 0; i < str.length; i++) {
// 결괏값 = mySum() 함수 수행하기
int temp = mySum(str[i]);
// 가장 앞 데이터일 때
if (i == 0)
// answer에 결괏값 더하기
answer = answer + temp;
else
// answer에 결괏값 빼기
answer = answer - temp;
}
// answer 출력하기
System.out.println(answer);
}
// 나뉜 그룹의 더하기 연산 수행 함수
public static int mySum(String a) {
int sum = 0;
// 현재 들어온 String 값을 "+" 기호 기준으로 split 수행하기
String[] temp = a.split("[+]");
for (int i = 0; i < temp.length; i++) {
// String 값을 Integer형으로 변환해 리턴값에 더하기
sum += Integer.parseInt(temp[i]);
}
// 전체 합 리턴하기
return sum;
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[1747] 소수&팰린드롬 (0) | 2023.09.15 |
---|---|
[1456] 거의 소수 (0) | 2023.09.15 |
[1931] 회의실 배정 (0) | 2023.09.14 |
[1744] 수 묶기 (0) | 2023.09.14 |
[1715] 카드 정렬하기 (0) | 2023.09.14 |