목록Study/Problem Solving (163)
전공공부
슬라이딩 윈도우 기법을 오랜만에 적용 해보아서 처음에 꽤나 헤맸던 문제다. aaabbaa 라는 문자열이 있으면 a의 갯수만큼 카운팅해서 그때의 존재하는 b의 갯수를 세면 총 옮겨야 하는 교환의 횟수가 된다. ababababab -> 중 a가 5개다. 즉, a 5개가 연속되면 된다. 그럼 여기서 ababa의 경우를 보면 b 두개 빼고 그 위치에 a 나머지 두개를 넣는다고 생각하면 된다. 이런식으로 생각을 하면 떠오르기가 쉬운데 처음에 캐치하기 힘들었던것 같다. 그리고, 문제 조건 중 원통의 구조로 마지막과 처음이 이어진 circle_queue 처럼 생각을 해야 하는 부분이 있다. 슬라이딩 윈도우가 처음이라면 블로그에 정리하였으니 찾아보면 좋을 것 같다. 슬라이딩 윈도우 슬라이딩 윈도우(Sliding Win..
감이 안 잡혀서 많이 참고하고 풀어 본 문제다. 최소 거리를 저장하는 배열을 두고 from -> to 갈 곳이 없을 때 계속 한 칸씩 앞으로 가는 것을 구현해내면 완성 할 수 있다. 상세 설명은 아래 코드와 함께 주석으로 적었다. package Graph; import java.io.*; import java.util.*; public class BOJ_1446 { static class Data { int to; int w; public Data(int to, int w) { this.to = to; this.w = w; } } public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(n..
DP 문제 인 것을 인식하고 풀었는데도 많이 어려웠다. 해설을 위해서 아래 내용을 보자 우선 행의 경우 각 숫자의 순서를 나타내고 열의 경우 1,2,3 의 숫자가 마지막에 나올 때의 갯수를 표시한다. 아래 식은 갯수를 표시하지 않고 실제 식으로 표현을 하였다. dp[1][1] - 1 dp[1][2] - 0 dp[1][3] - 0 dp[2][1] - 1+1 dp[2][2] - 2 dp[2][3] - 0 dp[3][1] - (1 + 1) + 1 dp[3][2] - 1 + 2 dp[3][3] - 3 dp[4][1] - (1 + 1 + 1) + 1 dp[4][2] - (1 + 1) + 2 , 2 + (2) dp[4][3] - (1) + 3 dp[5][1] - (1 + 1 + 1 + 1) + 1 dp[5][2] ..
단순 구현 문제였다. import java.util.*; import java.io.*; public class BOJ_7568 { static class Data { int weight; int height; public Data(int x, int y){ this.weight = x; this.height = y; } } public static void main(String[] args) throws Exception{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tk = new StringTokenizer(in.readLine()," "); int N = Integer.parseIn..
힙 문제는 대부분 PriorityQueue의 Comparator를 잘 구현하면 풀리는 것 같다. import java.io.*; import java.util.*; public class BOJ_11286 { public static void main(String[] args) throws Exception{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tk = new StringTokenizer(in.readLine()," "); int N = Integer.parseInt(tk.nextToken()); Queue q = new PriorityQueue(new Comparator() { ..
import java.io.*; import java.util.*; // Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`, // then press Enter. You can now see whitespace characters in your code. public class Main { public static void main(String[] args) throws Exception{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tk = new StringTokenizer(in.readL..
금메달 은메달 동메달 순서로 순위를 매기는데 이때 같은 점수가 나오면 1등 2등 2등 4등 이런식으로 점수가 매겨짐 따라서... Set으로 지우는 방식으로 진행하면 안되고 중복된 등수가 나오더라도 중복된 등수 만큼 살려두고 후의 등수를 매겨놔야 정확한 답을 얻을 수 있음. import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; public class BOJ_8979_올림픽 { static class Medal implements Comparable{ int idx; int g; int s; int d; public Medal (int idx, int g, int s, int d){ this.idx = idx;..
실제로 정렬을 할 필요 없이 내가 있는 위치에서 나 보다 앞에 있는 것 중 나보다 큰 수들만 내가 앞으로 간 만큼 실제로 뒤로 움직여지는 횟수이므로 내 자리 앞에 있는 수들 중 큰 수의 갯수를 보면 된다. import java.io.*; import java.util.*; public class BOJ_10431_줄_세우기 { public static void main(String[] args) throws Exception{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tk = new StringTokenizer(in.readLine()," "); int N = Integer.parseI..