diff --git a/coin-change/kimjunyoung90.java b/coin-change/kimjunyoung90.java new file mode 100644 index 0000000000..77baa1a95c --- /dev/null +++ b/coin-change/kimjunyoung90.java @@ -0,0 +1,28 @@ +import java.util.Arrays; + +class Solution { + //풀이 원리 = 특정 금액을 만들 때 최소 동전 수는 몇 개? + //예) 0원은 동전 0개 + // 1원은 동전 1개 + // 2원은 동전 1 + public int coinChange(int[] coins, int amount) { + //불가능한 값 + int max = amount + 1; + int[] dp = new int[amount + 1]; + //최소 동전 수를 모두 불가능한 값으로 설정 + Arrays.fill(dp, max); + dp[0] = 0; + + //금액 1원 부터 계산 + for (int i = 1; i <= amount; i++) { + //사용할 수 있는 동전을 꺼냄 + for(int coin: coins) { + if (coin <= i) { + dp[i] = Math.min(dp[i], dp[i - coin] + 1); + } + } + } + + return dp[amount] > amount ? -1 : dp[amount]; + } +} diff --git a/find-minimum-in-rotated-sorted-array/kimjunyoung90.java b/find-minimum-in-rotated-sorted-array/kimjunyoung90.java new file mode 100644 index 0000000000..651d4ff55d --- /dev/null +++ b/find-minimum-in-rotated-sorted-array/kimjunyoung90.java @@ -0,0 +1,18 @@ +// 요구사항 : 이진 탐색 이용 +class Solution { + public int findMin(int[] nums) { + int left = 0; + int right = nums.length - 1; + while(left < right) { + int mid = (left + right) / 2; + //중앙 값이 오른쪽 값보다 크다. = 최소값이 오른쪽 구간에 있음 + if(nums[mid] > nums[right]) { + left = mid + 1; + } else { + right = mid; + } + } + + return nums[left]; + } +} diff --git a/word-search/kimjunyoung90.java b/word-search/kimjunyoung90.java new file mode 100644 index 0000000000..606459190f --- /dev/null +++ b/word-search/kimjunyoung90.java @@ -0,0 +1,42 @@ +class Solution { + public boolean exist(char[][] board, String word) { + + int rows = board.length; + int columns = board[0].length; + boolean[][] visited = new boolean[rows][columns]; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < columns; j++) { + if (dfs(board, word, i, j, 0, visited)) { + return true; + } + } + } + return false; + } + + private boolean dfs(char[][] board, String word, int row, int col, int idx, boolean[][] visited) { + //예외 처리 1 + if (idx == word.length()) return true; + + //예외 처리 2 + if (row < 0 || col < 0 || row >= board.length || col >= board[0].length) return false; + + //예외 처리 3 + if (visited[row][col]) return false; + + //1. 글자 체크 + if (board[row][col] != word.charAt(idx)) return false; + + //방문 처리 + visited[row][col] = true; + + //상, 하, 좌, 우 찾기 + boolean found = dfs(board, word, row + 1, col, idx + 1, visited) + || dfs(board, word, row - 1, col, idx + 1, visited) + || dfs(board, word, row, col + 1, idx + 1, visited) + || dfs(board, word, row, col - 1, idx + 1, visited); + + visited[row][col] = false; + return found; + } +}