Skip to content

Commit 5f080b5

Browse files
authored
Merge pull request #2151 from kimjunyoung90/main
[kimjunyoung90] WEEK 04 solutions
2 parents 5b0692d + bd5443d commit 5f080b5

File tree

3 files changed

+88
-0
lines changed

3 files changed

+88
-0
lines changed

coin-change/kimjunyoung90.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import java.util.Arrays;
2+
3+
class Solution {
4+
//풀이 원리 = 특정 금액을 만들 때 최소 동전 수는 몇 개?
5+
//예) 0원은 동전 0개
6+
// 1원은 동전 1개
7+
// 2원은 동전 1
8+
public int coinChange(int[] coins, int amount) {
9+
//불가능한 값
10+
int max = amount + 1;
11+
int[] dp = new int[amount + 1];
12+
//최소 동전 수를 모두 불가능한 값으로 설정
13+
Arrays.fill(dp, max);
14+
dp[0] = 0;
15+
16+
//금액 1원 부터 계산
17+
for (int i = 1; i <= amount; i++) {
18+
//사용할 수 있는 동전을 꺼냄
19+
for(int coin: coins) {
20+
if (coin <= i) {
21+
dp[i] = Math.min(dp[i], dp[i - coin] + 1);
22+
}
23+
}
24+
}
25+
26+
return dp[amount] > amount ? -1 : dp[amount];
27+
}
28+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// 요구사항 : 이진 탐색 이용
2+
class Solution {
3+
public int findMin(int[] nums) {
4+
int left = 0;
5+
int right = nums.length - 1;
6+
while(left < right) {
7+
int mid = (left + right) / 2;
8+
//중앙 값이 오른쪽 값보다 크다. = 최소값이 오른쪽 구간에 있음
9+
if(nums[mid] > nums[right]) {
10+
left = mid + 1;
11+
} else {
12+
right = mid;
13+
}
14+
}
15+
16+
return nums[left];
17+
}
18+
}

word-search/kimjunyoung90.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
class Solution {
2+
public boolean exist(char[][] board, String word) {
3+
4+
int rows = board.length;
5+
int columns = board[0].length;
6+
boolean[][] visited = new boolean[rows][columns];
7+
for (int i = 0; i < rows; i++) {
8+
for (int j = 0; j < columns; j++) {
9+
if (dfs(board, word, i, j, 0, visited)) {
10+
return true;
11+
}
12+
}
13+
}
14+
return false;
15+
}
16+
17+
private boolean dfs(char[][] board, String word, int row, int col, int idx, boolean[][] visited) {
18+
//예외 처리 1
19+
if (idx == word.length()) return true;
20+
21+
//예외 처리 2
22+
if (row < 0 || col < 0 || row >= board.length || col >= board[0].length) return false;
23+
24+
//예외 처리 3
25+
if (visited[row][col]) return false;
26+
27+
//1. 글자 체크
28+
if (board[row][col] != word.charAt(idx)) return false;
29+
30+
//방문 처리
31+
visited[row][col] = true;
32+
33+
//상, 하, 좌, 우 찾기
34+
boolean found = dfs(board, word, row + 1, col, idx + 1, visited)
35+
|| dfs(board, word, row - 1, col, idx + 1, visited)
36+
|| dfs(board, word, row, col + 1, idx + 1, visited)
37+
|| dfs(board, word, row, col - 1, idx + 1, visited);
38+
39+
visited[row][col] = false;
40+
return found;
41+
}
42+
}

0 commit comments

Comments
 (0)