Skip to content

Commit e7f67a4

Browse files
authored
Merge pull request #19 from solid-connection/JAEHEE25
[Week02] BOJ: 퇴사 2
2 parents c6bb82a + e3b68c3 commit e7f67a4

File tree

2 files changed

+113
-0
lines changed

2 files changed

+113
-0
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import java.util.*;
2+
class Solution {
3+
public long solution(String expression) {
4+
List<String> list = toList(expression); //리스트로 분리
5+
6+
//우선순위별 계산
7+
String[] prior = {"*-+", "*+-", "+-*", "+*-", "-*+", "-+*"};
8+
long answer = 0;
9+
for (String p : prior) {
10+
answer = Math.max(getResult(list, p), answer); //해당 우선순위로 계산했을 때의 결과로 최댓값 찾기
11+
}
12+
return answer;
13+
}
14+
15+
long getResult(List<String> list, String p) {
16+
Deque<String> dq = new ArrayDeque<>();
17+
for (int i = 0; i < list.size(); i++) { //리스트로 덱 초기화
18+
dq.offerLast(list.get(i));
19+
}
20+
dq.offerLast("last"); //마지막 원소임을 표시
21+
22+
int pi = 0;
23+
char op = '.'; //.으로 초기화
24+
while (pi < 3) {
25+
String val = dq.pollFirst();
26+
27+
if (val.equals("last")) { //마지막 원소일 경우
28+
pi++;
29+
if (dq.size() == 1) { //1개만 남았을 경우 최종 결과 반환
30+
return Math.abs(Long.parseLong(dq.pollLast()));
31+
}
32+
dq.offerLast("last");
33+
continue;
34+
}
35+
36+
if (op != '.') { //계산
37+
long num1 = Long.parseLong(dq.pollLast());
38+
long num2 = Long.parseLong(val);
39+
long result = calculate(num1, num2, op);
40+
dq.offerLast(String.valueOf(result)); //연산 결과 삽입
41+
op = '.';
42+
continue;
43+
}
44+
45+
if (val.charAt(0) == p.charAt(pi)) { //우선순위에 해당하는 연산자라면
46+
op = val.charAt(0);
47+
} else {
48+
dq.offerLast(val);
49+
}
50+
}
51+
52+
return 0;
53+
}
54+
55+
long calculate(long num1, long num2, char op) {
56+
if (op == '*') {
57+
return num1 * num2;
58+
} else if (op == '+') {
59+
return num1 + num2;
60+
} else {
61+
return num1 - num2;
62+
}
63+
}
64+
65+
List<String> toList(String expression) {
66+
List<String> list = new ArrayList<>();
67+
StringBuilder sb = new StringBuilder();
68+
for (int i = 0; i < expression.length(); i++) {
69+
char c = expression.charAt(i);
70+
if (!Character.isDigit(c)) { //연산자라면
71+
list.add(sb.toString());
72+
sb = new StringBuilder();
73+
list.add(String.valueOf(c));
74+
} else {
75+
sb.append(c);
76+
}
77+
}
78+
list.add(sb.toString());
79+
return list;
80+
}
81+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package week02.BOJ_15486_퇴사2;
2+
3+
import java.util.*;
4+
import java.lang.*;
5+
import java.io.*;
6+
7+
class BOJ15486 {
8+
public static void main(String[] args) throws IOException {
9+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
int N = Integer.parseInt(br.readLine());
11+
int[] T = new int[N];
12+
int[] P = new int[N];
13+
for (int i = 0; i < N; i++) {
14+
StringTokenizer st = new StringTokenizer(br.readLine());
15+
int t = Integer.parseInt(st.nextToken());
16+
int p = Integer.parseInt(st.nextToken());
17+
T[i] = t;
18+
P[i] = p;
19+
}
20+
21+
int max = 0;
22+
int[] dp = new int[N + 1];
23+
for (int i = 0; i < N; i++) {
24+
max = Math.max(dp[i], max);
25+
if (i + T[i] <= N) { //기간 초과 제외
26+
dp[i + T[i]] = Math.max(P[i] + max, dp[i + T[i]]);
27+
}
28+
}
29+
30+
System.out.println(Math.max(dp[N], max));
31+
}
32+
}

0 commit comments

Comments
 (0)