목록JAVA (154)
Lewis's Tech Keep
- 실패한 시도 - 전 단계의 값들을 저장해 나가면서 하려고 했는데 - 이는 전 단계에 값들이 얼마나 다음 단계로 퍼져나갈 지 예상이 어려우므로 내가 하는 방식이 아니라 다른 방식으로 해야한다. - 실패한 코드에서 배워나가자 - dp && 최대값 문제 : 점화식 전 단계의 값을 어떻게 저장할 지 고민해야 함 - 최대값이라면 모든 경우의 수가 아니라 전 단계에는 전 단계의 최대값만 필요 더보기 class Solution { public int solution(int[][] triangle) { int answer = 0; // idx = 0 -> 7 // [7] // ------- // idx = 0 -> 3 + 7 // idx = 1 -> 8 + 7 // [10, 15] // ------- // idx ..
- 스택 기본 활용한다면 가볍게 넘길 수 있는 문제 더보기 import java.util.*; class Solution { boolean solution(String s) { boolean answer = true; Stack stack = new Stack(); for(int i=0; i 0 ? false : answer; } }
- 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..