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
67 changes: 67 additions & 0 deletions 01주차/박민수/1931.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import java.io.*;
import java.util.*;

/***
* 백준 1931번
* 회의실 배정
* 2023-10-09
*/

public class Main {

static class Meeting implements Comparable<Meeting> {
private int start;
private int end;

public Meeting(int start, int end) {
this.start = start;
this.end = end;
}

@Override
public int compareTo(Meeting o) {
// 회의 끝 (오름차순 정렬)
if (this.end > o.end) {
return 1;
} else if(this.end < o.end) {
return - 1;
} else
// 회의 끝 시간 같을 시, 회의 시작 (오름차순 정렬)
return this.start - o.start;
}
}

public static void main(String[] args) throws IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

int n = Integer.parseInt(br.readLine());

List<Meeting> meetings = new ArrayList<>();

StringTokenizer st = null;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
int s = Integer.parseInt(st.nextToken());
int e = Integer.parseInt(st.nextToken());
meetings.add(new Meeting(s, e));
}

// 회의 끝을 오름차순으로 정렬
Collections.sort(meetings);


int end = 0;
int answer = 0;

// 정렬된 회의에서 가장 빨리 끝나는 회의와 겹치지 않는 것을 카운팅하고, 가장 빨리 끝나는 회의 갱신
for (Meeting meeting : meetings) {
if (meeting.start >= end) {
end = meeting.end;
answer++;
}
}

System.out.println(answer);
}
}
75 changes: 75 additions & 0 deletions 02주차/박민수/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package BFS.BOJ13549;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {

public static class Distance {
int x;
int time;

public Distance(int x, int time) {
this.x = x;
this.time = time;
}
}

static int N; // 수빈이의 위치
static int K; // 동생의 위치
static final int DISTANCE_MAX = 100000;
static int[] counter = new int[100001]; // INDEX : 현재위치, VALUE : 최소이동횟수

static Queue<Integer> q = new LinkedList<>();

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());

N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
Arrays.fill(counter, Integer.MAX_VALUE);

// 처음 위치 큐에 삽입
q.add(N);
counter[N] = 0;
while(!q.isEmpty()) {
int now = q.poll();

if (now == K) {
System.out.println(counter[K]);
break;
}

// 걷는 경우, 순간이동 하는 경우 계산
for (int i = 0; i < 3; i++) {

switch (i) {
case 0:
if (now - 1 >= 0 && counter[now - 1] > counter[now] + 1) {
q.add(now - 1);
counter[now - 1] = counter[now] + 1;
}
break;
case 1:
if (now + 1 <= DISTANCE_MAX && counter[now + 1] > counter[now] + 1) {
q.add(now + 1);
counter[now + 1] = counter[now] + 1;
}
break;
case 2:
if (now * 2 <= DISTANCE_MAX && counter[now * 2] > counter[now]) {
q.add(now * 2);
counter[now * 2] = counter[now];
}
break;
}
}
}
}
}
63 changes: 63 additions & 0 deletions 04주차/박민수/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package ClassFour.BOJ11660;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

/***
* 백준 11660번
* 구간 합 구하기 5
* 2023-11-17
*
*/

public class Main {
static int N; // 1 <= N <= 1024
static int M; // 1 <= M <= 100,000
static int x1, y1, x2, y2; // x1 <= x2, y1 <= y2
static int[][] numbers;
static int[][] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());

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

numbers = new int[N + 1][N + 1];
dp = new int[N + 1][N + 1];

for (int i = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 1; j <= N;j ++) {
numbers[i][j] = Integer.parseInt(st.nextToken());
// 행 누적합 저장
if (j == 1) {
dp[i][j] = numbers[i][j];
} else {
dp[i][j] = dp[i][j - 1] + numbers[i][j];
}
}
}

StringBuilder sb = new StringBuilder();

for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
x1 = Integer.parseInt(st.nextToken());
y1 = Integer.parseInt(st.nextToken());
x2 = Integer.parseInt(st.nextToken());
y2 = Integer.parseInt(st.nextToken());

int total = 0;

for (int a = x1; a <= x2; a++) {
total += (dp[a][y2] - dp[a][y1 - 1]);
}
sb.append(total).append("\n");
}

System.out.println(sb);
}
}