자기가 괄호를 지워놓고 왜 잃어버린 괄호야?
아무튼 이런 문제다.
이런 간단한 문자열 다루는 문제가 어렵게 느껴질 때가 있어서 종종 풀어보면 좋은 것 같다.
이 문제는 간단한 문제 중에서도 제일 간단한 문제로, substring이나 replace같은 것도 필요 없다.
너무 쉬운 문제지만 일단 문제를 보고 주석을 작성해보자.
늘 정리하는 과정을 거치는 것이 빠르게 푸는 지름길이다.
1
2
3
4
5
6
7
8
9
|
// 양수, +, - 조합의 문장이 입력된다.
// 식은 '0'~'9', '+', '-'로만 이루어져있다.
// + , - , 괄호를 사용해서 최소값을 만드는 방법?
// - 이후로 다음 -가 나올 때까지 모두 괄호 안에 넣으면 된다.
// 10 - (10 + 10 + 10) - 10
// 숫자가 000009 같은 형태로 입력될 수 있음
// => String을 Integer로 변환 시 자동으로 앞의 0을 제거하므로 문제 없다.
|
cs |
나는 이렇게 작성했다.
사실 크게 설명할 게 없다.
+ 여러개, - 여러개, 숫자 여러개가 있다면 당연히 최소값을 만들기 위해서는 마이너스 기호 뒤에 있는 수가 커질수록 좋다.
따라서 - 바로 뒤에 오는 수부터, 그 다음 - 전까지의 모든 수를 더해주면 된다.
사실 막혀도 여기서 막힐 일은 없을 거고 어떻게 이것을 구현할 것인지 문제 풀이 방식이 생각이 안 날 수 있다.
야매 수도코드를 작성하며 방법을 떠올려보자.
힌트 : -를 기준으로..
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
32
33
|
public class Main {
// 양수, +, - 조합의 문장이 입력된다.
// 식은 '0'~'9', '+', '-'로만 이루어져있다.
// + , - , 괄호를 사용해서 최소값을 만드는 방법?
// - 이후로 다음 -가 나올 때까지 모두 괄호 안에 넣으면 된다.
// 10 - (10 + 10 + 10) - 10
// 숫자가 000009 같은 형태로 입력될 수 있음
// => String을 Integer로 변환 시 자동으로 앞의 0을 제거하므로 문제 없다.
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String dd = "dd";
// 문자열 식 입력 받기.
// 배열 = 문자열 식을 "-"기준으로 나눈다.
// 정답을 저장할 변수 answer 생성
// 반복문 ( i < 배열 길이 )
// 서브배열 = 배열[i]를 다시 "+"기준으로 나눈다.
// 임시 변수 생성
//
// 반복문 ( j < 서브 배열 크기 )
// 임시 변수 += 서브배열[j]
//
// 만약 answer가 0이라면 += 임시변수
// 아니라면 -= 임시변수
// 정답 출력
}
}
|
cs |
그렇다. -를 기준으로 나누면 내부는 +만 있을 것이다.
근데 너무 쉬운 문제라서 여기가지만 읽어도 이미 모든 걸 알려준 것이나 다름 없다.
그래서 오늘은 여기서 설명 끝.
이 주석대로만 풀면 틀린다.
아주 조금 다듬어야하는 곳이 있다.
정답은 아래에.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
// 양수, +, - 조합의 문장이 입력된다.
// 식은 '0'~'9', '+', '-'로만 이루어져있다.
// + , - , 괄호를 사용해서 최소값을 만드는 방법?
// - 이후로 다음 -가 나올 때까지 모두 괄호 안에 넣으면 된다.
// 10 - (10 + 10 + 10) - 10
// 숫자가 000009 같은 형태로 입력될 수 있음
// => String을 Integer로 변환 시 자동으로 앞의 0을 제거하므로 문제 없다.
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 문자열 식 입력 받기.
// 배열 = 문자열 식을 "-"기준으로 나눈다.
String[] arr = br.readLine().split("-");
// 정답을 저장할 변수 answer 생성
int answer = 0;
boolean checkIfAdded = false;
// 반복문 ( i < 배열 길이 )
for (int i=0; i<arr.length; i++) {
// 서브배열 = 배열[i]를 다시 "+"기준으로 나눈다.
String[] subArr = arr[i].split("\\+");
// 임시 변수 생성
int temp = 0;
//
// 반복문 ( j < 서브 배열 크기 )
for (int j=0; j< subArr.length; j++) {
// 임시 변수 += 서브배열[j]
temp += Integer.parseInt(subArr[j]);
}
if (!checkIfAdded) {
answer += temp;
checkIfAdded = true;
} else {
answer -= temp;
}
// 만약 answer가 0이라면 += 임시변수
// 아니라면 -= 임시변수
}
// 정답 출력
System.out.println(answer);
}
}
|
cs |
'CS ﹒ Algorithm > Baekjoon' 카테고리의 다른 글
백준 Java 문제풀이 (62) 1747_소수 & 팰린드롬 수 중에서 최솟값 찾기 (0) | 2022.11.09 |
---|---|
Jav 문제풀이 (61) 거의 소수 (0) | 2022.11.06 |
Java 백준 문제풀이 (59) 1931 _ 회의실 배정 (0) | 2022.11.02 |
Java 백준 문제풀이 (58) 1744 _ 수 묶기 (0) | 2022.10.29 |
Java 백준 문제풀이 (58) 1715 _ 카드 정렬하기 (0) | 2022.10.29 |