목록Java/알고리즘 (120)
Lewis's Tech Keep
- DP 는 아직 할 때마다 감이 잘 안 온다 - 기본 아이디어 - TOP-BOTTOM && BOTTOM-TOP 방식을 기억을 잘 할 것 (이전 단계의 값을 저장해서 내려가거나 올라간다) - 한번에 다 하는 것이 아니라 쪼갠다 (recursive 한 부분인 것을 잘 기억) - 조건을 잘 찾을 수 있게 생각해야 한다. - 풀이는 답을 보고 했던 부분이지만 설명 - 미리 1~8단계까지 SET 형태의 자료구조로 준비 - i-> 1-> 8 까지 돌면서 N 횟수가 커지는 것을 표현 - j -> 1단계일 경우 N -> N -> 2단계일 경우 NN -> NN -> N (+N, -N, *N, /N) -> 3단계일 경우 NNN -> NNN -> NN (+N, -N, *N, /N), -> N +N (+N, -N, *N, ..
- formula 만들어서 하는 방식 : 실행시간 효율적, 공간 적게 차지 - 그러나 이해하기 힘든 단점 + 로직적으로 문제와 잘 안 물리는 부분이 있음 (문제는 거리 -> path로 변경하기 때문) - 나중에 생각해보면 boolean으로 하려면 4차원 배열이 오히려 가장 직관적일 수도 있음 - 객체 지향으로 풀었을 때는 아래의 답이 깔끔하게 나오는 것 중 하나라고 생각함 더보기 import java.util.*; class Solution { class Point { int x; int y; public Point(int x, int y) { this.x = x; this.y = y; } public int getX() { return this.x; } public int getY() { return ..
- 간선 맵 생성 (edgeMap) - 각 간선 맵에 맞는 index를 좌표를 기반으로 하여 대입 (1:1 mapping 가능하게 함) - 각 간선 체크 - 완료 피드백 - 좋지 않은 이유 : 공식 세우는 데만 6시간 이상 걸려버렸다.. 이럴 만한 이유까지는 없었는데.. - 클래스로 생성 후 비교 시 좀 더 깔끔하게 마무리 가능하다. 더보기 import java.util.*; class Solution { public int solution(String dirs) { int answer = 0; int lineCount = 11; // 11 * 11 line int cellCount = lineCount - 1; // 11줄 -> 10칸 int totalLineCount = lineCount * cell..
정렬 방법에 관한 문제 - number -> string으로 바꿔서 바꾼 값을 다시 o1 + o2 , o2 + o1 과 비교가 가능한 지 생각했다면 빠르게 풀 수 있었던 문제 - 생각보다 시간이 조금 걸렸다. (설명을 잘 못 읽어서..) - 문제를 좀 더 잘 이해할 수 있다면 좀 더 빨리 끝낼 수 있을 것이다. 더보기 class Solution { public int solution(int[] citations) { int answer = 0; int max = 0; for(int num: citations) { if(max 0; i--) { int overCount = 0; for(int num: citations) { if(n..
DFS/BFS 를 통해 푸는 문제 - 탈출 조건 (모든 경로에 도달, 경로를 찾을 수 없을 때) - 신경 써야할 중간 조건 (분기점 (=여러 곳에 비행기가 도착할 수 있는 경우의 수, = 중간 지점에서 두 가지의 경로로 진행 가능한 경우) - 예외사항 (아예 도달할 수 없는 경우) 더보기 import java.util.*; class Solution { boolean[] checks; String[][] tickets; List resultList = new ArrayList(); void dfs(String lastLocation, List locations) { boolean isCompleted = true; for(boolean flag: checks) { if (!flag) { isComplet..
DFS 연습 - 탈출 조건 (= target 단어를 맞췄을 경우 && 최소 단계 확인) - 단어 변경 메소드 시 (check로 이미 flag가 true 인지 확인) 주의점 - 한 단어 차이가 나는 단어가 복수 개 일 수 있음(조건 한번 더 잘 생각할 것!) 더보기 import java.util.*; class Solution { int min; String target; String[] words; boolean[] checkWords; private void dfs(String cWord, int stage) { if(cWord.equals(target)) { if(min > stage || min == 0) { min = stage; } return; } List indexArr = findOneDi..
DFS 연습하는 문제 DFS 시 항상 생각해야 할 문제 1. 탈출 조건을 어떻게 만들 지 2. DFS 라면 깊이를 어떻게 끝까지 도달하게 할 지 3. 예외 사항 처리 어떻게 할 지 순서로 고민해보자. - 네트워크에서의 탈출조건 1. 모든 네트워크 지점 체크 완료 (예 1,2,3 이 있다면 노드 1,2,3 체크 완료) 2. 네트워크가 연결될 경우 끝까지 도달하고 도달했다면 false 리턴 ( 체크한 노드들은 모드 0 = false 로 바꿔주기) 3. 예외 사항 처리 ( 없음) 더보기 class Solution { static Boolean dfs(int[][] computers,int n) { if(computers[n][n] == 0) { return false; } computers[n][n] = 0;..
우선순위 큐의 min, max 값을 그냥 이용하기만 하면 됐던 문제 maxHeap -> min 은 maxHeap의 가장 마지막 값 min 값 뽑아내는 과정이 조금 마음에 들지 않지만 나중에 이 부분은 한번 더 해보자 더보기 import java.util.*; class Solution { static int findMinimumElement(PriorityQueue maxHeap) { int min = maxHeap.peek(); for(Integer num: maxHeap) { if(min > num) { min = num; } } maxHeap.remove(min); return min; } public int[] solution(String[] operations) { int[] answer = n..