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 week38/강성욱/baekjoon/NQueen.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package week38.강성욱.baekjoon;

import java.util.Arrays;

/**
* PackageName : week38.강성욱.baekjoon
* FileName : NQueen
* Author : Baekgwa
* Date : 26. 1. 20.
* Description :
* =====================================================================================================================
* DATE AUTHOR NOTE
* ---------------------------------------------------------------------------------------------------------------------
* 26. 1. 20. Baekgwa Initial creation
*/
public class NQueen {
class Solution {

private static int count = 0;

public int solution(int n) {
boolean[][] map = new boolean[n][n];

for (int i = 0; i < n; i++) {
Arrays.fill(map[i], true);
}

dfs(0, n, map);
return count;
}

private void dfs(int y, int n, boolean[][] map) {
if(y == n) {
count++;
return;
}

for(int x = 0; x < n; x++) {
if(!map[y][x]) continue;

boolean[][] nextMap = new boolean[n][n];
for (int i = 0; i < n; i++) {
nextMap[i] = map[i].clone();
}

updateMap(nextMap, x, y, n);
dfs(y + 1, n, nextMap);
}
}

private void updateMap(boolean[][] map, int x, int y, int n) {
for (int ny = y + 1; ny < n; ny++) {
map[ny][x] = false;

int diff = ny - y;

if (x - diff >= 0) {
map[ny][x - diff] = false;
}

if (x + diff < n) {
map[ny][x + diff] = false;
}
}
}
}
}
70 changes: 70 additions & 0 deletions week38/강성욱/baekjoon/입국심사.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package week38.강성욱.baekjoon;

/**
* PackageName : week38.강성욱.baekjoon
* FileName : 입국심사
* Author : Baekgwa
* Date : 26. 1. 20.
* Description :
* =====================================================================================================================
* DATE AUTHOR NOTE
* ---------------------------------------------------------------------------------------------------------------------
* 26. 1. 20. Baekgwa Initial creation
*/
public class 입국심사 {
class Solution {
// 그럼 심사원의 명수는 times size 만큼이네?
// 그냥 비어있는곳에 갓다 넣어버리면 그게 더 이득인가?
// 꼭 그렇진 않음.
// 즉, 지금 비어있는 곳 중, 가장 빨리 입국심사 패스하는 사람한테 할당해줘야 젤 빨리 끝남.
// ----
// 근데 입국심사 기다리는 사람이 벌써 10억명임.
// 즉, 하나씩 iter 돌면 거의 반드시 터짐.
// 줄여야함.
// ---
// 그래서 이분탐색을 쓰면 되는거구나
// n 초 중에서, 얼만큼 처리할 수 있는지 확인
// 최소초는 음 그냥 0으로 두고
// 맥스는 반드시 모두 처리할 수 있는 시간, 즉, n * 1,000,000,000분(분은 솔직히 max 찾는게 낫긴한데, 그냥 이렇게 써도 큰문제는 없지않아?), 걍 max 찾자
public long solution(int n, int[] times) {
long result = Long.MAX_VALUE; //모든 사람을 처리할 수 있는 시간

long max = 0L;
for(int time : times) {
max = Math.max(time, max);
}

long left = 0L;
long right = max * n;

while(left <= right) {
long mid = (left + right) / 2;

long nowCount = calcPassCount(mid, times); //현재 mid(시간) 값으로, 몇명이나 처리 가능한지 확인하기

// 처리 가능하면?
if(nowCount >= n) {
right = mid - 1L;
result = Math.min(mid, result);
continue;
} else {
left = mid + 1L;
continue;
}
}

return result;
}

//현재 mid(시간) 값으로, 몇명이나 처리 가능한지 확인하기
private long calcPassCount(long mid, int[] times) {
long count = 0L;

for(int time : times) {
count += mid / (long) time;
}

return count;
}
}
}
102 changes: 102 additions & 0 deletions week38/강성욱/baekjoon/타임머신.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package week38.강성욱.baekjoon;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;

/**
* PackageName : week38.강성욱.baekjoon
* FileName : 타임머신
* Author : Baekgwa
* Date : 26. 1. 20.
* Description :
* =====================================================================================================================
* DATE AUTHOR NOTE
* ---------------------------------------------------------------------------------------------------------------------
* 26. 1. 20. Baekgwa Initial creation
*/
public class 타임머신 {
public class Main {
// 무조건 1번 도시에서 시작!
// 아 음수가 있네.
// 이러면 다익스트라 사용 불가능
// 벨만 포드로
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());

long[] dist = new long[N + 1];
Arrays.fill(dist, Long.MAX_VALUE);
dist[1] = 0;

List<Edge> edgeList = new ArrayList<>();
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
int weight = Integer.parseInt(st.nextToken());
edgeList.add(new Edge(start, end, weight));
}

// N-1번까지는 최단거리 갱신, N번째는 음수 사이클 확인
for (int i = 0; i < N; i++) {
for (Edge edge : edgeList) {
if (dist[edge.getStart()] == Long.MAX_VALUE)
continue;

int start = edge.getStart();
int end = edge.getEnd();
int weight = edge.getWeight();

long distance = dist[start] + weight;
if (dist[end] > distance) {
dist[end] = distance;
if (i == N - 1) {
System.out.println("-1");
return;
}
}
}
}

StringBuilder sb = new StringBuilder();
for (int i = 2; i <= N; i++) {
if (dist[i] == Long.MAX_VALUE) {
sb.append("-1").append("\n");
} else {
sb.append(dist[i]).append("\n");
}
}
System.out.print(sb.toString());
}

private static class Edge {
private int start;
private int end;
private int weight;

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

public int getStart() {
return start;
}

public int getEnd() {
return end;
}

public int getWeight() {
return weight;
}
}
}
}
61 changes: 61 additions & 0 deletions week38/강성욱/baekjoon/파일_합치기.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package week38.강성욱.baekjoon;

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

/**
* PackageName : week38.강성욱.baekjoon
* FileName : 파일_합치기
* Author : Baekgwa
* Date : 26. 1. 20.
* Description :
* =====================================================================================================================
* DATE AUTHOR NOTE
* ---------------------------------------------------------------------------------------------------------------------
* 26. 1. 20. Baekgwa Initial creation
*/
public class 파일_합치기 {
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int testCase = Integer.parseInt(br.readLine());

while(testCase-- > 0) {
int K = Integer.parseInt(br.readLine());
int[][] dp = new int[K+1][K+1];
int[] map = new int[K+1];

StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 1; i <= K; i++) {
map[i] = Integer.parseInt(st.nextToken());
}

int[] prefix = new int[K+1];
for (int i = 1; i <= K; i++) {
prefix[i] = prefix[i-1] + map[i];
}

for(int length=2; length <= K; length++) {
for(int start=1; start + length -1 <= K; start++) {
int end = start + length - 1;
dp[start][end] = Integer.MAX_VALUE;

for(int k=start; k<end; k++) {
dp[start][end] = Math.min(
dp[start][end],
dp[start][k] + dp[k+1][end] + (prefix[end] - prefix[start-1])
);
}
}
}

sb.append(dp[1][K]).append("\n");
}

System.out.println(sb.toString());
}
}
}