Skip to content

Commit e35a11f

Browse files
committed
Merge remote-tracking branch 'origin/main' into hexeong
2 parents 578e2b9 + c739c69 commit e35a11f

File tree

84 files changed

+3536
-5
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+3536
-5
lines changed

.github/workflows/auto-weekly-issue.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@ jobs:
1616
- name: Calculate week number and dates
1717
id: calc
1818
run: |
19-
# 현재 날짜 기준 주차 계산 (1월 1일 기준)
2019
WEEK_NUM=$(date +%U)
21-
# 주차를 2자리로 포맷 (01, 02, ...)
22-
WEEK_NUM_FORMATTED=$(printf "%02d" $((WEEK_NUM + 1)))
20+
21+
WEEK_NUM_FORMATTED=$(printf "%02d" $((10#$WEEK_NUM + 1)))
2322
24-
# 이번 주 월요일과 일요일 계산
2523
START_DATE=$(date -d "monday" +%Y.%m.%d)
26-
END_DATE=$(date -d "sunday" +%Y.%m.%d)
24+
END_DATE=$(date -d "monday + 6 days" +%Y.%m.%d)
2725
2826
echo "week_number=$WEEK_NUM_FORMATTED" >> $GITHUB_OUTPUT
2927
echo "start_date=$START_DATE" >> $GITHUB_OUTPUT
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import java.util.*;
2+
import java.lang.*;
3+
import java.io.*;
4+
5+
class Main {
6+
public static void main(String[] args) throws IOException {
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
9+
//dp
10+
long[] dp = new long[1000001];
11+
dp[1] = 1;
12+
dp[2] = 2;
13+
dp[3] = 4;
14+
for (int i = 4; i <= 1000000; i++) {
15+
dp[i] = (dp[i - 3] + dp[i - 2] + dp[i - 1]) % 1_000_000_009;
16+
}
17+
18+
//정답 출력
19+
StringBuilder answer = new StringBuilder();
20+
int T = Integer.parseInt(br.readLine());
21+
for (int i = 0; i < T; i++) {
22+
int t = Integer.parseInt(br.readLine());
23+
answer.append(dp[t] % 1_000_000_009).append("\n");
24+
}
25+
System.out.println(answer);
26+
}
27+
}

personal/JAEHEE25/BOJ/BOJ2156.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import java.util.*;
2+
import java.lang.*;
3+
import java.io.*;
4+
5+
class BOJ2156 {
6+
public static void main(String[] args) throws IOException {
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
int N = Integer.parseInt(br.readLine());
9+
int[] wines = new int[N+1];
10+
for (int i = 1; i <= N; i++) {
11+
wines[i] = Integer.parseInt(br.readLine());
12+
}
13+
14+
int[] dp = new int[N+1]; //dp[i] = i까지 최대로 마실 수 있는 포도주의 양
15+
for (int i = 1; i <= N; i++) {
16+
if (i == 1) dp[1] = wines[1];
17+
else if (i == 2) dp[2] = wines[1] + wines[2];
18+
else dp[i] = Math.max(dp[i-1], wines[i] + Math.max(dp[i-2], dp[i-3] + wines[i-1]));
19+
}
20+
21+
System.out.println(dp[N]);
22+
23+
}
24+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public int solution(int[][] jobs) {
5+
Arrays.sort(jobs, (o1, o2) -> o1[0] - o2[0]); //요청 시각 기준 정렬
6+
7+
PriorityQueue<Job> waitQueue = new PriorityQueue<>(); //대기 큐
8+
9+
int totalTime = 0;
10+
int ji = 0; //jobs 인덱스
11+
int time = 0; //현재 시간
12+
int endCnt = 0; //종료한 작업 수
13+
14+
while (endCnt < jobs.length) {
15+
//현재 시간 전까지의 작업 모두 대기 큐에 삽입
16+
while (ji < jobs.length && jobs[ji][0] <= time) {
17+
waitQueue.add(new Job(ji, jobs[ji][0], jobs[ji][1]));
18+
ji++;
19+
}
20+
21+
//대기 큐에서 꺼내서 작업 시작
22+
if (!waitQueue.isEmpty()) {
23+
Job job = waitQueue.poll();
24+
time += job.processTime;
25+
totalTime += (time - job.requestTime);
26+
endCnt++;
27+
} else {
28+
time = jobs[ji][0]; //처리할 작업이 없으면 다음 작업 요청 시간으로 이동
29+
}
30+
}
31+
32+
return totalTime / jobs.length;
33+
}
34+
}
35+
36+
class Job implements Comparable<Job> {
37+
int num;
38+
int requestTime;
39+
int processTime;
40+
41+
Job(int num, int requestTime, int processTime) {
42+
this.num = num;
43+
this.requestTime = requestTime;
44+
this.processTime = processTime;
45+
}
46+
47+
@Override
48+
public int compareTo(Job o) {
49+
//소요시간이 짧은 것 -> 요청 시각이 빠른 것 -> 번호가 작은 것
50+
if (this.processTime == o.processTime) {
51+
if (this.requestTime == o.requestTime) {
52+
return this.num - o.num;
53+
}
54+
return this.requestTime - o.requestTime;
55+
}
56+
return this.processTime - o.processTime;
57+
}
58+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public int solution(String s) {
5+
int answer = Integer.MAX_VALUE;
6+
int len = 1; //단위
7+
int N = s.length();
8+
9+
while (len <= N) {
10+
StringBuilder resultBuilder = new StringBuilder();
11+
StringBuilder wordBuilder = new StringBuilder();
12+
String prev = "";
13+
String word = "";
14+
int cnt = 0;
15+
for (int i = 0; i <= N; i++) {
16+
word = wordBuilder.toString();
17+
if (word.length() == len) {
18+
if (prev.equals("")) { //맨 처음일 경우 prev에 저장
19+
prev = word;
20+
cnt++;
21+
} else if (prev.equals(word)) { //연속된 단어일 경우 개수 카운트
22+
cnt++;
23+
} else { //새로운 단어일 경우 이전 단어 기록
24+
if (cnt <= 1) resultBuilder.append(prev);
25+
else resultBuilder.append(cnt + prev);
26+
prev = word;
27+
cnt = 1;
28+
}
29+
wordBuilder = new StringBuilder(); //초기화
30+
}
31+
if (i < N) wordBuilder.append(s.charAt(i));
32+
}
33+
34+
//마지막 처리
35+
if (cnt <= 1) resultBuilder.append(prev);
36+
else resultBuilder.append(cnt + prev);
37+
resultBuilder.append(wordBuilder.toString()); //남은 글자들
38+
39+
//정답 구하기
40+
answer = Math.min(resultBuilder.length(), answer);
41+
len++;
42+
}
43+
44+
return answer;
45+
}
46+
}
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+
}
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: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include <iostream>
2+
#include <algorithm>
3+
4+
using namespace std;
5+
6+
int dp[1500051];
7+
pair<int, int> consult[1500001]; // consult[i] = { x, y } : i일의 상담은 x일이 걸리며 수익은 y
8+
9+
int main() {
10+
int n;
11+
cin >> n;
12+
for (int i = 1; i <= n; i++) {
13+
int x, y;
14+
cin >> x >> y;
15+
consult[i] = { x, y };
16+
}
17+
18+
for (int i = 1; i <= n; i++) {
19+
dp[i + 1] = max(dp[i + 1], dp[i]);
20+
21+
if (i + consult[i].first <= n + 1) {
22+
dp[i + consult[i].first] = max(dp[i + consult[i].first], dp[i] + consult[i].second);
23+
}
24+
}
25+
26+
cout << dp[n + 1] << "\n";
27+
}

0 commit comments

Comments
 (0)