Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 데이터베이스
- 데이터베이스 개론
- 이것이 자바다
- 머신러닝(딥러닝)
- JavaScript
- 개발자
- Java
- 카카오클라우드스쿨2기
- pandas
- 파이썬
- Database
- flatten
- 생활코딩 데이터베이스
- 생활코딩
- Python
- reshape
- 머신러닝야학
- 판다스
- 딥러닝
- CNN
- 연산자
- 생활코딩 머신러닝야학
- 데이터베이서
- MySQL
- tensorflow
- 야학
- LeNet
- 머신러닝
Archives
- Today
- Total
IT's 우
[java]백준 1541번: 잃어버린 괄호, 그리디 알고리즘, split()함수, split("+") 안돼! split("[+]") or split("\\+") 본문
알고리즘/백준
[java]백준 1541번: 잃어버린 괄호, 그리디 알고리즘, split()함수, split("+") 안돼! split("[+]") or split("\\+")
디우 2022. 9. 27. 02:22728x90
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
그리디 greedy 알고리즘:
현재 상태에서 보는 선택지 중 최선의 선택지가 전체 선택지 중 최선의 선택지라고 가정하는 알고리즘
그리디 알고리즘의 핵심 이론
① 해 선택: 현재 상태에서 가장 최선이라고 생각되는 해를 선택
② 적절성 검사: 현재 선택한 해가 전체 문제의 제약 조건에 벗어나지 않는지 검사
③ 해 검사: 현재까지 선택한 해 집합이 전체 문제를 해결할 수 있는지 검사. 전체 문제를 해결하지 못한다면 ①로 돌아가 같은 과정 반복
내가 푼 코드와 split()을 사용한 코드
코드 1: 내가 푼 거
import java.io.*;
import java.util.*;
public class j1541 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
char[] ch = str.toCharArray();
int sum = 0;
boolean minus = false; // false면 + true면 -
Queue<Integer> que = new LinkedList<>();
for (char c : ch) {
if (c != '-' && c != '+') {
que.add(c - '0');
} else {
if (minus == false) {// 마이너스 만나기 전에 다 더해준다
sum += change(que);
que = new LinkedList<>();
} else {// 마이너스 만나면 다 빼준다
sum -= change(que);
que = new LinkedList<>();
}
if (c == '-') {
minus = true;
}
}
}
if (minus == false) {
sum += change(que);
} else {
sum -= change(que);
}
System.out.println(sum);
}
static int change(Queue<Integer> q) {
int result = 0;
for (int i = q.size() - 1; i >= 0; i--) {
result += q.poll() * Math.pow(10, i);
}
return result;
}
}
풀이 1
1. 문장을 String str로 받아서 char [] 배열로 바꿔주고 부호를 만날 때마다 change 함수를 사용하여 숫자로 바꿔줌
-> change는 queue를 사용하여 숫자로 바꿔줌
2. -를 만나기 전까지 모든 수를 더해주고 -를 만난 이후로는 숫자를 모두 빼준다.
split을 사용한 코드
import java.util.*;
public class j1541_2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String exam=sc.nextLine();
// split을 사용하여 -를 기준으로 나눠준다.
String[] str=exam.split("-");
int answer=0;
for(int i=0;i<str.length;i++) {
int temp=Sum(str[i]);
if(i==0) {//0은 마이너스 만나기 전이므로 다 더해준다
answer+=temp;
}else {//마이너스 만난 이후로는 모두 뺴준다.
answer-=temp;
}
}
System.out.println(answer);
}
static int Sum(String s) {
int sum=0;
String temp[]=s.split("[+]"); // split("+")부분에서 컴파일러가 + 부분을 인식 못함 split.("+") or split.("\\+")
for(int i=0;i<temp.length;i++) {
sum+=Integer.parseInt(temp[i]);
}
return sum;
}
}
풀이
// split을 사용하여 -를 기준으로 나눠준다.
String[] str=exam.split("-");
나눠준 부분은 str[0]: 1번째를 제외하곤 모두 빼준다. 첫 번째 이후에는 -를 만난 부분이므로
->
-로 나눠준 부분 더해주기 위해 Sum 함수 구현:
String [] temp =s.split("[+]");
나눠준 temp는 Integer.parseInt() 사용하여 숫자로 더해준다.
string.split("+") 부분에서 컴파일러가 + 부분을 인식하지 못한다. 그러므로 str.split("[+]") or str.split("\\+")
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[java]백준 2293번: 동전 1, 동적 계획법(dynamic programming) 알고리즘 (1) | 2022.09.29 |
---|---|
[java]백준 1038번: 감소하는 수, ArrayList 첫번째에 넣어주기 list.add(0,123), ArrayList 합치기 list.addAll(list2) (0) | 2022.09.27 |
[java]백준 1931번: 회의실 배정, 그리디 알고리즘 (0) | 2022.09.27 |
[java]백준 1744번: 수 묶기, 그리디 알고리즘 (1) | 2022.09.26 |
[java]백준 11047번: 동전 0, 그리디 알고리즘 (1) | 2022.09.26 |