Skip to content

Commit fc92033

Browse files
committed
2 parents cde53ab + ac48825 commit fc92033

File tree

16 files changed

+550
-0
lines changed

16 files changed

+550
-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: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include <iostream>
2+
#include <unordered_set>
3+
using namespace std;
4+
5+
int main() {
6+
ios_base::sync_with_stdio(false);
7+
cin.tie(nullptr);
8+
cout.tie(nullptr);
9+
int N, num1, M, num2;
10+
cin >> N;
11+
unordered_set<int> numbers;
12+
numbers.reserve(N);
13+
while (N--) {
14+
cin >> num1;
15+
numbers.insert(num1);
16+
}
17+
cin >> M;
18+
while (M--) {
19+
cin >> num2;
20+
if (numbers.find(num2) != numbers.end()) cout << 1 << "\n";
21+
else cout << 0 << "\n";
22+
}
23+
}
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+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#include <iostream>
2+
#include <algorithm>
3+
4+
using namespace std;
5+
6+
int n, ret;
7+
int arr[1500001][2];
8+
int dp[1500001];
9+
10+
int main() {
11+
ios_base::sync_with_stdio(false);
12+
cin.tie(NULL);
13+
cout.tie(NULL);
14+
15+
cin >> n;
16+
17+
for (int i = 0; i < n; i++) {
18+
cin >> arr[i][0] >> arr[i][1];
19+
}
20+
21+
for (int i = n - 1; i >= 0; i--) {
22+
if (i + arr[i][0] <= n) {
23+
dp[i] = max(dp[i + 1], arr[i][1] + dp[i + arr[i][0]]);
24+
} else {
25+
dp[i] = dp[i + 1];
26+
}
27+
}
28+
29+
cout << dp[0] << '\n';
30+
return 0;
31+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package stduy.week02;
2+
3+
import java.io.BufferedReader;
4+
import java.io.IOException;
5+
import java.io.InputStreamReader;
6+
7+
// 퇴사 2
8+
// 답 확인
9+
public class BOJ_15486 {
10+
11+
public static void main(String[] args) throws IOException {
12+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
13+
14+
int N = Integer.parseInt(br.readLine());
15+
int[] T = new int[N + 1];
16+
int[] P = new int[N + 1];
17+
18+
for(int i = 1; i <= N; i++){
19+
String[] s = br.readLine().split(" ");
20+
T[i] = Integer.parseInt(s[0]);
21+
P[i] = Integer.parseInt(s[1]);
22+
}
23+
24+
int[] dp = new int[N + 2]; // N+1일에 끝나는 상담을 위해 N+2 크기
25+
26+
for(int i = 1; i <= N; i++){
27+
// i 일에 상담을 하지 않으면, i일의 수익이 i+1 에도 그대로 유지
28+
dp[i + 1] = Math.max(dp[i + 1], dp[i]);
29+
30+
// i일에 상담을 하는 경우
31+
int endDay = i + T[i];
32+
if(endDay <= N + 1){
33+
dp[endDay] = Math.max(dp[endDay], dp[i] + P[i]); // 수익이 발생하는 날에 바로 P값을 적용한 결과 저장
34+
}
35+
}
36+
37+
System.out.println(dp[N + 1]);
38+
}
39+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//
2+
// Created by hex on 26. 1. 19..
3+
//
4+
5+
#include <iostream>
6+
#include <vector>
7+
8+
using namespace std;
9+
10+
int main() {
11+
ios::sync_with_stdio(false);
12+
cin.tie(nullptr);
13+
cout.tie(nullptr);
14+
15+
int n; cin >> n;
16+
vector<int> arr(n);
17+
vector<int> dp(n, 1);
18+
19+
for (int i = 0; i < n; i++)
20+
cin >> arr[i];
21+
22+
int max_v = 1;
23+
for (int i = 0; i < n; i++) {
24+
for (int j = 0; j < i; j++) {
25+
if (arr[j] < arr[i]) {
26+
dp[i] = max(dp[i], dp[j] + 1);
27+
}
28+
}
29+
max_v = max(max_v, dp[i]);
30+
}
31+
32+
cout << max_v << endl;
33+
34+
return 0;
35+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#include <iostream>
2+
#include <algorithm>
3+
4+
using namespace std;
5+
6+
int n, len, num;
7+
int lis[1001];
8+
int main() {
9+
ios_base::sync_with_stdio(false);
10+
cin.tie(NULL);
11+
cout.tie(NULL);
12+
13+
cin >> n;
14+
15+
for (int i = 0; i < n; i++) {
16+
cin >> num;
17+
auto lowerPos = lower_bound(lis, lis + len, num);
18+
if (*lowerPos == 0) {
19+
len++;
20+
}
21+
*lowerPos = num;
22+
}
23+
24+
cout << len << '\n';
25+
return 0;
26+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
5+
// 상자 넣기
6+
// 알고리즘 종류 확인
7+
public class BOJ_1965 {
8+
9+
public static void main(String[] args) throws IOException {
10+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
12+
int N = Integer.parseInt(br.readLine());
13+
14+
int [] arr = new int[N+1];
15+
String [] s = br.readLine().split(" ");
16+
int [] dp = new int[N+1];
17+
18+
for(int i=1; i<=N; i++){
19+
arr[i] = Integer.parseInt(s[i-1]);
20+
dp[i] = 1;
21+
}
22+
23+
for(int i=2; i<=N; i++){
24+
for(int j=1; j<i; j++){
25+
if(arr[i] > arr[j]){
26+
dp[i] = Math.max(dp[j]+1, dp[i]);
27+
}
28+
}
29+
}
30+
31+
int max = 0;
32+
for(int i=1; i<=N; i++){
33+
if(max < dp[i]){
34+
max = dp[i];
35+
}
36+
}
37+
38+
System.out.println(max);
39+
}
40+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#include <string>
2+
#include <vector>
3+
using namespace std;
4+
5+
vector<int> answer;
6+
vector<int> numbers;
7+
vector<long long> dp;
8+
9+
vector<int> solution(int n, long long k) {
10+
dp.resize(n);
11+
dp[0] = 1;
12+
for (int i = 1; i < n; i++) {
13+
dp[i] = dp[i-1] * i;
14+
}
15+
16+
for (int i = 1; i <= n; i++) {
17+
numbers.push_back(i);
18+
}
19+
20+
k--;
21+
22+
for (int i = 0; i < n; i++) {
23+
long long idx = k / dp[n-1-i];
24+
answer.push_back(numbers[idx]);
25+
numbers.erase(numbers.begin() + idx);
26+
k %= dp[n-1-i];
27+
}
28+
29+
return answer;
30+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# 이번 주도 파이팅!🔥

0 commit comments

Comments
 (0)