Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 83c20f8

Browse files
Merge pull request #104 from icegosimperson/main
[8주차] 이혜원
2 parents 73702ca + aac01e5 commit 83c20f8

File tree

8 files changed

+340
-0
lines changed

8 files changed

+340
-0
lines changed

‎BOJ/1000-5000번/HW_1911.java‎

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.Arrays;
5+
import java.util.StringTokenizer;
6+
7+
// 모든 물웅덩이들을 덮기 위해 필요한 널빤지들의 최소 개수를 출력
8+
// 시작 위치로부터 순서대로(->정렬) 물웅덩이를 덮어 나가기 -> 그리디
9+
public class Main {
10+
public static void main(String[] args) throws IOException {
11+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
12+
StringTokenizer st = new StringTokenizer(br.readLine());
13+
int N = Integer.parseInt(st.nextToken());
14+
int L = Integer.parseInt(st.nextToken());
15+
int[][] puddles = new int [N][2];
16+
for(int i=0; i<N; i++){
17+
st = new StringTokenizer(br.readLine());
18+
int s = Integer.parseInt(st.nextToken());
19+
int e = Integer.parseInt(st.nextToken());
20+
puddles[i][0] = s; // 물웅덩이 시작
21+
puddles[i][1] = e; // 물웅덩이 끝
22+
}
23+
Arrays.sort(puddles, (a, b) -> Integer.compare(a[0], b[0])); // 시작 위치부터 순서대로 덮기 위해 오름차순 정렬
24+
25+
int current = 0; // 현재 덮은 위치의 끝
26+
int cnt = 0; // 필요한 널빤지 개수
27+
28+
for(int i=0; i<puddles.length; i++){ // 물 웅덩이 덮기
29+
int s = puddles[i][0];
30+
int e = puddles[i][1];
31+
32+
if(current >= e){ // 이미 덮였다면
33+
continue;
34+
}
35+
if(current < s){
36+
current = s;
37+
}
38+
39+
int result = (int) Math.ceil((e - current) / (double) L); // (덮어야할 길이 / 널빤지 길이)
40+
cnt += result; // 널빤지 개수++
41+
current += result * L; // 덮은 위치 갱신
42+
}
43+
System.out.println(cnt);
44+
}
45+
}

‎BOJ/1000-5000번/HW_2461.java‎

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import org.w3c.dom.Node;
2+
3+
import java.io.BufferedReader;
4+
import java.io.IOException;
5+
import java.io.InputStreamReader;
6+
import java.util.*;
7+
8+
public class Main {
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 M = Integer.parseInt(st.nextToken());
14+
int[][] students = new int[N][M];
15+
16+
for(int i=0; i<N; i++){
17+
st = new StringTokenizer(br.readLine());
18+
for(int j=0; j<M; j++){
19+
students[i][j] = Integer.parseInt(st.nextToken());
20+
}
21+
Arrays.sort(students[i]); // 각 반의 능력치 정렬
22+
}
23+
24+
int[] indexs = new int[N]; // 학생들 인덱스를 저장할 배열
25+
for(int i=0; i<N; i++){
26+
indexs[i] = 0;
27+
}
28+
int min = Integer.MAX_VALUE;
29+
30+
while(true){
31+
int curMin = students[0][indexs[0]];
32+
int curMax= students[0][indexs[0]];
33+
int minIdex = 0;
34+
for(int i=1; i<N; i++){
35+
if (curMin > students[i][indexs[i]]) { // 최솟값
36+
curMin = students[i][indexs[i]];
37+
minIdex = i;
38+
}
39+
if(curMax < students[i][indexs[i]]){ // 최댓값
40+
curMax = students[i][indexs[i]];
41+
}
42+
}
43+
if((curMax - curMin) < min){
44+
min = curMax - curMin;
45+
}
46+
if(++indexs[minIdex] >= M)
47+
break;
48+
}
49+
System.out.println(min);
50+
}
51+
}

‎BOJ/20001-25000번/HW_20007.java‎

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import org.w3c.dom.Node;
2+
3+
import java.io.BufferedReader;
4+
import java.io.IOException;
5+
import java.io.InputStreamReader;
6+
import java.util.*;
7+
8+
// 시간복잡도 : N<=1,000, M<=100,000 O(NM) 가능
9+
// 이웃집 모두에 떡을 돌리기 위한 최소 일을 출력
10+
// 만약 모두 방문할수 없으면 -1을 출력
11+
public class Main {
12+
static class Node implements Comparable<Node>{
13+
int house;
14+
int cost;
15+
Node(int house, int cost){
16+
this.house = house;
17+
this.cost = cost;
18+
}
19+
public int compareTo(Node other){
20+
return this.cost - other.cost;
21+
}
22+
}
23+
24+
static List<Node>[] graph;
25+
static int[] distance;
26+
public static void main(String[] args) throws IOException {
27+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
28+
StringTokenizer st = new StringTokenizer(br.readLine());
29+
int N = Integer.parseInt(st.nextToken()); // 집 개수
30+
int M = Integer.parseInt(st.nextToken()); // 도로 개수
31+
int X = Integer.parseInt(st.nextToken()); // 도로 길이 <= 1000000000
32+
int Y = Integer.parseInt(st.nextToken()); // 성현이 집
33+
34+
// 그래프 초기화
35+
graph = new ArrayList[N];
36+
for(int i=0; i<N; i++){
37+
graph[i] = new ArrayList<>();
38+
}
39+
40+
for(int i=0; i<M; i++){ // 도로 위치 입력 받기 -> 그래프?
41+
st = new StringTokenizer(br.readLine());
42+
int A = Integer.parseInt(st.nextToken());
43+
int B = Integer.parseInt(st.nextToken());
44+
int C = Integer.parseInt(st.nextToken());
45+
graph[A].add(new Node(B, C)); // A -> B 양방향
46+
graph[B].add(new Node(A, C)); // B -> A
47+
}
48+
distance = new int[N];
49+
Arrays.fill(distance, Integer.MAX_VALUE);
50+
dijkstra(Y);
51+
52+
int days = 1; // 최소 일수(첫날 1일)
53+
int totalDistance = 0;
54+
Arrays.sort(distance);
55+
56+
for (int i = 0; i < N; i++) { // 거리 확인
57+
if (i != Y) { // 성현이의 집은 제외
58+
if (distance[i] * 2 > X) { // 왕복 거리 초과
59+
System.out.println(-1); // 방문x
60+
return;
61+
}
62+
if (totalDistance + distance[i] * 2 > X) { // 하루 이동 거리 초과
63+
days++; // 하루 추가
64+
totalDistance = 0; // 새로운 날로 초기화
65+
}
66+
totalDistance += distance[i] * 2; // 방문한 거리 추가
67+
}
68+
}
69+
System.out.println(days); // 최소 일수
70+
}
71+
public static void dijkstra(int start) {
72+
PriorityQueue<Node> pq = new PriorityQueue<>();
73+
pq.add(new Node(start, 0));
74+
distance[start] = 0; // 시작 위치는 거리 0
75+
76+
while (!pq.isEmpty()) {
77+
Node cur = pq.poll();
78+
int curHouse = cur.house;
79+
int curCost = cur.cost;
80+
81+
if (curCost > distance[curHouse]) continue;
82+
83+
for (int i = 0; i < graph[curHouse].size(); i++) {
84+
Node neighbor = graph[curHouse].get(i);
85+
int newCost = distance[curHouse] + neighbor.cost;
86+
87+
if (newCost < distance[neighbor.house]) {
88+
distance[neighbor.house] = newCost;
89+
pq.add(new Node(neighbor.house, newCost));
90+
}
91+
}
92+
}
93+
}
94+
}

‎BOJ/5001-10000번/HW_9342.java‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
5+
public class Main {
6+
public static void main(String[] args) throws IOException {
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
int T = Integer.parseInt(br.readLine());
9+
String str = "^[ABCDEF]?A+F+C+[ABCDEF]?$";
10+
11+
StringBuilder sb = new StringBuilder();
12+
while(T-->0){
13+
sb.append(br.readLine().matches(str) ? "Infected!" : "Good").append('\n');
14+
}
15+
System.out.println(sb);
16+
}
17+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import java.util.*;
2+
import java.io.*;
3+
4+
// 방화벽 3개를 추가로 설치 했을 때 방화벽을 제외하고 불이 퍼지지 않는 영역 크기의 최댓값을 출력
5+
public class HW_방화벽_설치하기 {
6+
static int n, m;
7+
static int[][] board;
8+
static int[] dx = {-1, 1, 0, 0}; // 상하좌우
9+
static int[] dy = {0, 0, -1, 1};
10+
static int max = Integer.MIN_VALUE;
11+
12+
public static void main(String[] args) throws IOException {
13+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
14+
StringTokenizer st = new StringTokenizer(br.readLine());
15+
n = Integer.parseInt(st.nextToken());
16+
m = Integer.parseInt(st.nextToken());
17+
board = new int[n][m];
18+
19+
for (int i = 0; i < n; i++) {
20+
st = new StringTokenizer(br.readLine());
21+
for (int j = 0; j < m; j++) {
22+
board[i][j] = Integer.parseInt(st.nextToken());
23+
}
24+
}
25+
dfs(0);
26+
System.out.println(max);
27+
}
28+
29+
static void dfs(int wall) { // 방화벽 설치
30+
if (wall == 3) { // 방화벽 3개까지
31+
bfs();
32+
return;
33+
}
34+
35+
for (int i = 0; i < n; i++) {
36+
for (int j = 0; j < m; j++) {
37+
if (board[i][j] == 0) {
38+
board[i][j] = 1;
39+
dfs(wall + 1);
40+
board[i][j] = 0;
41+
}
42+
}
43+
}
44+
}
45+
46+
static void bfs() { // 불 번지는 영역 확인
47+
Queue<Node> queue = new LinkedList<>();
48+
int[][] temp = new int[n][m];
49+
50+
for (int i = 0; i < n; i++) { // 배열 복사
51+
for (int j = 0; j < m; j++) {
52+
temp[i][j] = board[i][j];
53+
if (board[i][j] == 2) { // 불이 있을 경우
54+
queue.add(new Node(i, j)); // 불 번짐
55+
}
56+
}
57+
}
58+
while (!queue.isEmpty()) {
59+
Node node = queue.poll();
60+
int x = node.x;
61+
int y = node.y;
62+
63+
for (int k = 0; k < 4; k++) {
64+
int nx = x + dx[k];
65+
int ny = y + dy[k];
66+
if (isRange(nx, ny) && temp[nx][ny] == 0) {
67+
queue.add(new Node(nx, ny));
68+
temp[nx][ny] = 2;
69+
}
70+
}
71+
}
72+
check(temp);
73+
}
74+
75+
static void check(int[][] temp) { // 불이 번지지 않은 영역 확인
76+
int safe = 0;
77+
for (int i = 0; i < n; i++) {
78+
for (int j = 0; j < m; j++) {
79+
if (temp[i][j] == 0) {
80+
safe++;
81+
}
82+
}
83+
}
84+
max = Math.max(max, safe);
85+
}
86+
87+
static boolean isRange(int nx, int ny) {
88+
return nx >= 0 && nx < n && ny >= 0 && ny < m;
89+
}
90+
91+
static class Node {
92+
int x;
93+
int y;
94+
95+
Node(int x, int y) {
96+
this.x = x;
97+
this.y = y;
98+
}
99+
}
100+
}

‎Programmers/Level2/HW_150369.java‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// 시간복잡도 : N<=100,000 완전 탐색 불가
2+
// 트럭 하나로 모든 배달과 수거를 마치고 물류창고까지 돌아올 수 있는 최소 이동 거리
3+
// 모든 배달과 수거 -> 각 집 방문 -> 전체거리 최소화 -> 멀리있는 집부터 방문해서 돌아오기
4+
class Solution {
5+
public long solution(int cap, int n, int[] deliveries, int[] pickups) {
6+
long answer = 0;
7+
int delivery = 0;
8+
int pickup = 0;
9+
for(int i=n-1; i>=0; i--){
10+
delivery += deliveries[i];
11+
pickup += pickups[i];
12+
while(delivery>0 || pickup>0){
13+
delivery-= cap;
14+
pickup -= cap;
15+
answer += (i+1) * 2;
16+
}
17+
}
18+
return answer;
19+
}
20+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
-- https://school.programmers.co.kr/learn/courses/30/lessons/59412
2+
-- 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성
3+
SELECT HOUR(DATETIME) AS HOUR, COUNT(ANIMAL_ID) AS COUNT
4+
FROM ANIMAL_OUTS
5+
GROUP BY HOUR(DATETIME)
6+
HAVING HOUR >= 9 AND HOUR <= 19
7+
ORDER BY HOUR
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-- https://school.programmers.co.kr/learn/courses/30/lessons/164671
2+
SELECT CONCAT('/home/grep/src/', A.BOARD_ID,'/',B.FILE_ID,B.FILE_NAME,B.FILE_EXT) AS FILE_PATH
3+
FROM USED_GOODS_BOARD A JOIN USED_GOODS_FILE B
4+
ON A.BOARD_ID = B.BOARD_ID
5+
WHERE A.VIEWS IN (SELECT MAX(VIEWS) FROM USED_GOODS_BOARD)
6+
ORDER BY FILE_ID DESC;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /