https://www.acmicpc.net/problem/1541
실버2 수준의 1541번 잃어버린 괄호 문제이다.
처음에 보고 쉽다고 생각했는데, 생각보다 시간이 좀 걸렸다.
문자열도 좀 다룰줄 알아야 하는 문제이다
우선 어떻게 코드를 설계해야할지 생각해보았다.
처음에는 괄호를 하나만 할 수 있는줄 알고 코드를 짜보았는데, 자꾸 틀리길래 보니까 괄호의 수는 여러개여도 상관이 없는거 같았다. 어쩐지 어렵더라
문자열을 입력받고 마이너스(-) 가 있는 구분별로 문자열을 잘라 그 안에 + 가 있다면 다 더해버리면 될거 같았다.
EX) 55-50+40 = 45
-> 55 - (50+40)
-> 55 - 90 = -35
이 알고리즘대로 하면 최솟값을 출력할 수 있다
따라서 코드를 구현해보았다
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
String [] part = str.split("-");
int total = calculate(part[0]);
for(int i=1; i<part.length; i++){
total -= calculate(part[i]);
}
System.out.print(total);
}
private static int calculate(String s) {
String[] part = s.split("\\+"); // "+"는 정규 표현식에서 특별한 의미를 갖기 때문에 "\\"를 추가하여 이스케이프해야 한다.
int total = 0;
for (int i = 0; i < part.length; i++) {
total += Integer.parseInt(part[i]); //
}
return total;
}
}
Scanner를 통해 str라는 문자열을 입력받고, .split을 통해 "-" 을 경계로 문자열을 생성하여 분리해준다
그 뒤의 과정들은 거의 calculate 메서드에서 진행되는데, 문자열 s를 넘겨서 s 안에 "+" 가 있다면 "+"을 기준으로 다시 .split 해 더해서 total 이라는 숫자 값을 return 한다.
우선 part[] 에 저장되어 있는 값을 빼야하는데, 첫번째인 part[0] 값에서 뒤에 값들을 다 빼야하므로, total이라는 값을 part[0] 의 값으로 설정한 후, for 문을 통해 계속 빼도록 구현하였다.
calculate 메서드 안에서 "+"으로 .split을 할때 자꾸 오류가 났는데, "+"는 정규 표현식에서 특별한 의미를 갖기 때문에 "\"를 추가하여 이스케이프해야 한다고 한다. 꼭 기억해야될거 같다.
금방 풀 수 있을줄 알았는데, 생각보다 시간이 걸려서 문자열 다루는 법을 다시 익혀야겠다고 생각했다