728x90
문제
: 입력된 문자열에서 입력된 숫자를 부호 기준으로 나누어 계산하여 최소값을 출력
문제 링크: https://www.acmicpc.net/submit/1541/57721152
원리
1. 부호를 기준으로 나눠서 계산
2. 최소값을 구해야 하므로, 최대한 뺄 수 있는 만큼 빼야됨
3. 정규 표현식 사용
String[] forPlus = tempStr.split("[^A-Z0-9]+|[^0-9$]");
풀이방법
1. "-"를 기준으로 블록을 나눔
2. "-"를 기준으로 나눈 블록마다 들어있는 숫자를 합함
3. 첫 번째 블록의 합산에서 나머지 블록만큼을 전부 빼줌
* 1. '-'를 기준으로 전부 나눠서 저장 : -기준으로 나눈 값들은 전부 +이므로, 총 합을 맨 첫 숫자에서 빼주면 최소값이 됨
* 2. '+'로 나눠서 전부 합해줌
* 3. 맨 첫번째 합산에서 나머지 뒤의 합산을 전부 빼줌
나의 코드
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] forMinus = br.readLine().split("-");
int head = 0;
int tails = 0;
for(int i = 0 ; i<forMinus.length; i++) {
int temp = 0;
if(forMinus[i].contains("+")) {
String tempStr = forMinus[i];
String[] forPlus = tempStr.split("[^A-Z0-9]+|[^0-9$]");
for(int j =0; j<forPlus.length; j++) {
temp+=Integer.parseInt(forPlus[j]);
}
} else temp += Integer.parseInt(forMinus[i]);
if(i==0) head = temp;
else tails+=temp;
}
System.out.println(head - tails);
}
728x90
'알고리즘 저장소 (일반방식과 나만의 풀이) > JAVA' 카테고리의 다른 글
| [백준] no2178: 미로 탐색 (0) | 2023.03.22 |
|---|---|
| [백준] no2579: 계단 오르기 (0) | 2023.03.21 |
| [백준] no1389: 케빈 베이컨의 6단계 법칙 (0) | 2023.03.18 |
| [Programmers] no161990: 바탕화면 정리 (0) | 2023.03.13 |
| [Programmers] no160586: 대충만든 자판 (0) | 2023.03.13 |