Skip to content

Commit 51a4457

Browse files
authored
Merge pull request #61 from solid-connection/JAEHEE25
[Week08] BOJ 15989: 1, 2, 3 더하기 4
2 parents 38e5534 + f3c0ce5 commit 51a4457

File tree

4 files changed

+161
-0
lines changed

4 files changed

+161
-0
lines changed
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+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package week08.BOJ_13549_숨바꼭질3;
2+
3+
import java.util.*;
4+
import java.lang.*;
5+
import java.io.*;
6+
7+
class BOJ13549 {
8+
static boolean[] visit;
9+
public static void main(String[] args) throws IOException {
10+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
StringTokenizer st = new StringTokenizer(br.readLine());
12+
int N = Integer.parseInt(st.nextToken()); //수빈
13+
int K = Integer.parseInt(st.nextToken()); //동생
14+
15+
int answer = Integer.MAX_VALUE;
16+
visit = new boolean[100001];
17+
Queue<Pos> queue = new LinkedList<>();
18+
queue.add(new Pos(N, 0));
19+
while (!queue.isEmpty()) {
20+
Pos poll = queue.poll();
21+
visit[poll.x] = true;
22+
23+
if (poll.x == K) {
24+
answer = Math.min(answer, poll.time);
25+
}
26+
27+
if (check(poll.x + 1)) queue.add(new Pos(poll.x + 1, poll.time + 1));
28+
if (check(poll.x - 1)) queue.add(new Pos(poll.x - 1, poll.time + 1));
29+
if (check(poll.x * 2)) queue.add(new Pos(poll.x * 2, poll.time));
30+
}
31+
System.out.println(answer);
32+
}
33+
34+
static boolean check(int value) {
35+
return value >= 0 && value <= 100000 && !visit[value];
36+
}
37+
}
38+
39+
class Pos {
40+
int x;
41+
int time;
42+
43+
Pos(int x, int time) {
44+
this.x = x;
45+
this.time = time;
46+
}
47+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import java.util.*;
2+
import java.lang.*;
3+
import java.io.*;
4+
5+
class BOJ15989 {
6+
public static void main(String[] args) throws IOException {
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
9+
//dp[i][j] = i를 만들 때 마지막 숫자가 j이고, 오름차순인 방법의 수
10+
int[][] dp = new int[10001][4];
11+
dp[1][1] = 1; //1
12+
dp[2][1] = 1; //1,1
13+
dp[2][2] = 1; //2
14+
dp[3][1] = 1; //1,1,1
15+
dp[3][2] = 1; //1,2
16+
dp[3][3] = 1; //3
17+
for (int i = 4; i <= 10000; i++) {
18+
dp[i][1] = dp[i-1][1];
19+
dp[i][2] = dp[i-2][1] + dp[i-2][2];
20+
dp[i][3] = dp[i-3][1] + dp[i-3][2] + dp[i-3][3];
21+
}
22+
23+
//정답 출력
24+
StringBuilder answer = new StringBuilder();
25+
int T = Integer.parseInt(br.readLine());
26+
for (int i = 0; i < T; i++) {
27+
int t = Integer.parseInt(br.readLine());
28+
answer.append(dp[t][1] + dp[t][2] + dp[t][3]).append("\n");
29+
}
30+
System.out.println(answer);
31+
}
32+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package week08.BOJ_2531_회전초밥;
2+
3+
import java.util.*;
4+
import java.lang.*;
5+
import java.io.*;
6+
7+
class BOJ2531 {
8+
public static void main(String[] args) throws IOException {
9+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
StringTokenizer st = new StringTokenizer(br.readLine());
11+
int N = Integer.parseInt(st.nextToken());
12+
int d = Integer.parseInt(st.nextToken());
13+
int k = Integer.parseInt(st.nextToken());
14+
int c = Integer.parseInt(st.nextToken());
15+
16+
int[] plates = new int[N];
17+
for (int i = 0; i < N; i++) {
18+
plates[i] = Integer.parseInt(br.readLine());
19+
}
20+
21+
Map<Integer, Integer> sushi = new HashMap<>();
22+
//처음 k개의 접시
23+
for (int i = 0; i < k; i++) {
24+
sushi.put(plates[i], sushi.getOrDefault(plates[i], 0) + 1);
25+
}
26+
27+
int start = 0;
28+
int end = k;
29+
int answer = sushi.size();
30+
if (!sushi.containsKey(c)) answer++;
31+
32+
while (start < N - 1) {
33+
//이전 스시 빼기
34+
if (sushi.get(plates[start]) == 1) { //1개 남았다면 아예 삭제
35+
sushi.remove(plates[start]);
36+
} else {
37+
sushi.put(plates[start], sushi.get(plates[start]) - 1);
38+
}
39+
40+
if (end >= N) end %= N; //원형 벨트
41+
sushi.put(plates[end], sushi.getOrDefault(plates[end], 0) + 1); //다음 초밥 넣기
42+
43+
int cnt = sushi.size();
44+
if (!sushi.containsKey(c)) {
45+
cnt++;
46+
}
47+
answer = Math.max(answer, cnt);
48+
49+
start++;
50+
end++;
51+
52+
}
53+
System.out.println(answer);
54+
}
55+
}

0 commit comments

Comments
 (0)