Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions 김민진/2학기/1주차/[Baekjoon-10159] 저울.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package semester2.week1;

import java.io.*;
import java.util.StringTokenizer;

public class Q5Scale {

private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
private static final StringBuilder sb = new StringBuilder();
private static StringTokenizer st;

private static int N;
private static int M;

private static int[][] mat;

public static void main(String[] args) throws IOException {
init();
sol();
}

private static void init() throws IOException {
N = Integer.parseInt(br.readLine());
M = Integer.parseInt(br.readLine());

mat = new int[N + 1][N + 1];

for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());

int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());

mat[a][b] = 1; // big
mat[b][a] = -1; // small
}
}

private static void sol() throws IOException {
for (int k = 1; k < N + 1; k++) {
for (int i = 1; i < N + 1; i++) {
for (int j = 1; j < N + 1; j++) {
// big
if (mat[i][k] == 1 && mat[k][j] == 1) {
mat[i][j] = 1;

// small
} else if (mat[i][k] == -1 && mat[k][j] == -1) {
mat[i][j] = -1;
}
}
}
}

for (int i = 1; i < N + 1; i++) {
int cnt = 0;
for (int j = 1; j < N + 1; j++) {
if (i != j && mat[i][j] == 0) {
cnt++;
}
}
sb.append(cnt).append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
}

}
87 changes: 87 additions & 0 deletions 김민진/2학기/1주차/[Baekjoon-1561] 놀이공원.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package semester2.week1;

import java.io.*;
import java.util.StringTokenizer;

public class Q4AmusementPark {

private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
private static StringTokenizer st;

private static int N;
private static int M;
private static int[] opTime;

public static void main(String[] args) throws IOException {
init();
sol();
}

private static void init() throws IOException {
st = new StringTokenizer(br.readLine());

N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());

opTime = new int[M];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < M; i++) {
opTime[i] = Integer.parseInt(st.nextToken());
}
}

private static void sol() throws IOException {
// 놀이기구 수가 많거나 같을 때
if (N <= M) {
bw.write(N + "");
} else {
long left = 0;
long right = N / M * 30L; // 최대 소요 시간
long targetTime = 0;

// N번째 아이가 탈 수 있는 시간 찾기
while (left <= right) {
long mid = (left + right) / 2;
long totalChildren = M;

// mid 시간에 탈 수 있는 아이의 수
for (int i = 0; i < M; i++) {
totalChildren += mid / opTime[i];
}

// N명 이상의 아이가 탈 수 있음 → 범위 좁히기
if (totalChildren >= N) {
targetTime = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
getAns(targetTime);
}
bw.flush();
bw.close();
}

private static void getAns(long time) throws IOException {
// N-1번째 아이가 타는 시간(time - 1)을 기반으로
long childrenBefore = M;
for (int i = 0; i < M; i++) {
childrenBefore += (time - 1) / opTime[i];
}

// N번째 아이가 어느 놀이기구에 타는지 찾기
// 이분탐색에서 N번째 아이가 탈 수 있는 최소 시간을 찾음
// 따라서 time일 때 최소 하나 이상의 비어있는 기구가 있음이 보장됨
for (int i = 0; i < M; i++) {
if (time % opTime[i] == 0) {
childrenBefore++;
if (childrenBefore == N) {
bw.write((i + 1) + "\n");
return;
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package semester2.week1;

import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Q3YouMustSolveThis {

private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
private static final StringBuilder sb = new StringBuilder();
private static StringTokenizer st;

private static int A;
private static int Q;
private static int[] nums;
private static int[] prefix;

public static void main(String[] args) throws IOException {
init();
sol();
}

private static void init() throws IOException {
st = new StringTokenizer(br.readLine());

A = Integer.parseInt(st.nextToken());
Q = Integer.parseInt(st.nextToken());

nums = new int[A + 1];
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= A; i++) {
nums[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(nums);

prefix = new int[A + 1];
}

private static void sol() throws IOException {
makePrefix();

while (Q-- > 0) {
st = new StringTokenizer(br.readLine());

int L = Integer.parseInt(st.nextToken());
int R = Integer.parseInt(st.nextToken());

sb.append(prefix[R] - prefix[L - 1]).append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
}

private static void makePrefix() {
for (int i = 1; i <= A; i++) {
prefix[i] = prefix[i - 1] + nums[i];
}
}

}
94 changes: 94 additions & 0 deletions 김민진/2학기/1주차/[Baekjoon-2239] 스도쿠.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package semester2.week1;

import java.io.*;

public class Q1Sudoku {

private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
private static final StringBuilder sb = new StringBuilder();

private static char[][] input;

public static void main(String[] args) throws IOException {
init();
sol();
}

private static void init() throws IOException {
input = new char[9][9];

for (int i = 0; i < 9; i++) {
String str = br.readLine();

for (int j = 0; j < 9; j++) {
input[i][j] = str.charAt(j);
}
}
}

private static void sol() throws IOException {
if (dfs(0, 0)) {
for (int a = 0; a < 9; a++) {
for (int b = 0; b < 9; b++) {
sb.append(input[a][b]);
}
sb.append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
}
}

private static boolean dfs(int i, int j) {
if (i >= 9) {
return true;
}

int nx = j == 8 ? i + 1 : i;
int ny = j == 8 ? 0 : j + 1;

if (input[i][j] != '0') return dfs(nx, ny);

for (int k = 1; k <= 9; k++) {
char val = (char) (k + '0');

input[i][j] = val;

if (isValid(i, j)) {
if (dfs(nx, ny)) {
return true;
}
}
input[i][j] = '0';
}
return false;
}

private static boolean isValid(int x, int y) {
// vertical
for (int i = 0; i < 9; i++) {
if (i == x) continue;
if (input[i][y] == input[x][y]) return false;
}

// horizontal
for (int j = 0; j < 9; j++) {
if (j == y) continue;
if (input[x][j] == input[x][y]) return false;
}

// square
int a = x / 3 * 3;
int b = y / 3 * 3;
for (int i = a; i < a + 3; i++) {
for (int j = b; j < b + 3; j++) {
if (x == i && y == j) continue;
if (input[i][j] == input[x][y]) return false;
}
}
return true;
}

}
64 changes: 64 additions & 0 deletions 김민진/2학기/1주차/[Baekjoon-9935] 문자열 폭발.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package semester2.week1;

import java.io.*;
import java.util.Stack;

public class Q2StringEruption {

private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

private static String haystack;
private static String needle;
private static int len;

private static Stack<Character> s;

public static void main(String[] args) throws IOException {
init();
sol();
}

private static void init() throws IOException {
haystack = br.readLine();
needle = br.readLine();
len = needle.length();

s = new Stack<>();
}

private static void sol() throws IOException {
for (int i = 0; i < haystack.length(); i++) {
s.push(haystack.charAt(i));

if (s.size() >= len && isNeedle()) {
for (int j = 0; j < len; j++) {
s.pop();
}
}
}
printAns();
}

private static void printAns() throws IOException {
if (s.empty()) {
bw.write("FRULA");
} else {
for (char str : s) {
bw.write(str);
}
}
bw.flush();
bw.close();
}

private static boolean isNeedle() {
for (int i = 0; i < len; i++) {
if (!s.get(s.size() - len + i).equals(needle.charAt(i))) {
return false;
}
}
return true;
}

}