일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- BFS
- union_find
- javascript
- JPA
- html
- Java
- sql
- deque
- map
- Properties
- 스프링부트
- alter
- set
- onetomany
- NIO
- math
- scanner
- dfs
- priority_queue
- string
- Calendar
- 큐
- 스택
- List
- composite key
- date
- delete recursive
- Union-find
- CSS
- spring boot
- Today
- Total
목록전체 글 (242)
김미썸코딩
이문제는 구현 문제이다. 원쿠션을 한다는 것을 통해 벽을 기준으로 점을 대칭시킨다는 생각을 가장 먼저 해야하고, 시작공과 목표 공이 x축이나 y축에 수평으로 놓여있을때 4개의 벽 한 벽에선 시작공이 벽보다 목표공을 맞추게 되므로 이를 예외 시켜야한다. import java.util.*; class Solution { static class Point{ int x,y; public Point(int x, int y){ this.x = x; this.y = y; } } public int[] solution(int m, int n, int startX, int startY, int[][] balls) { int[] answer = new int[balls.length]; Point border = new P..
BFS로 풀수 있는 문제이다. 항상 문제를 제대로 읽어야한다. 갈수 있는 상하좌우 방향으로 한칸씩 도는게 아니고.. 모든방향을 장애물이나 맨끝에 부딪힐때까지 미끄러져서 가는 것이 한번의 이동이다. 따라서 (0,0)에서 아래방향으로 가는데 장애물이 없어서 맨끝인 (n,0)까지 미끄러진다하면 (0,0)에서 (n,0)까지 가는것이 한번의 이동인 것이다. 또한, 목표물인 G까지 도달하는 것도 이 원칙이 적용 되어서 G의 상하좌우에 장애물있거나 G가 맨끝에 위치하는 경우에만 G에 도착이 가능하다. import java.util.*; class Solution { private final int[] dx = {-1,1,0,0}; private final int[] dy = {0,0,-1,1}; private fin..
그리디로 풀수 있는 문제이다. 이문제를 가장 먼저 접근했을때 실수한 것이 무조건 맨 첨에 다이아 곡괭이부터 광물을 캐기 시작한다고 생각한 것이다. 한 곡괭이 당 광물을 5개까지는 무조건 캐야하니 광물 리스트를 보고 가장 피로도가 높은 광물 구간은 가장 좋은 곡괭이로 캐야하는 것이다. 그러기 위해선 가장 먼저 광물 리스트에서 5개씩 구간을 잘라서 해당 구간에서 곡괭이별 피로도 합산을 구해야한다. 1. 특정 구간의 곡괭이별 피로도 합산 클래스를 (내코드에선 TiredSumPerPick) 만들어야한다. 2. 광물 리스트를 돌며 5개씩 피로도 합산을 구해서 피로도 합산 리스트를 만든다. 3. 피로도 합산 리스트에서 돌곡괭이로 캐는 경우 합산 값들끼리 비교하여 내림차순 정렬한다. 4. 곡괭이 리스트는 이미 가장 ..
. 생각해야할 경우의 수가 많았던 문제이다. 과제(Task) 클래스를 하나 만들어서 PriorityQueue와 Stack 을 사용하면 수월하게 풀수 있다. PriorityQueue말고 Arrays를 써서 정렬해서 써도된다 import java.util.*; class Solution { static class Task{ private String name; private int start; private int playtime; public Task(String name, int start, int playtime){ this.name = name; this.start = start; this.playtime = playtime; } public Task(String name, int playtime){..
x와 y가 정수여야하기때문에 올림, 내림 함수를 사용하면 아주 쉽게 풀어낼 수 있다. import java.util.*; class Solution { public long solution(int r1, int r2) { long answer = 0; for(int x = 1; x
스케줄링 문제와 매우 유사. 스케줄링 문제와 비슷하게 끝나는 시간을 기준으로 오름차순을 하고 반복문을 통해서 하나씩 시작점, 종점에 포함되는지 비교하면됨. Arrays.sort(targets, (o1, o2) -> { if(o1[1] == o2[1]) return o1[0] - o2[0]; return o1[1] - o2[1]; }); 위 코드로 종점을 오름차순 정렬. import java.util.*; class Solution { public int solution(int[][] targets) { int answer = 0; Arrays.sort(targets, (o1, o2) -> { if(o1[1] == o2[1]) return o1[0] - o2[0]; return o1[1] - o2[1]; ..