Skip to content

Commit 08e5a69

Browse files
authored
Merge pull request #1889 from geegong/main
[geegong] WEEK 07 Solutions
2 parents 672aeba + e8fe2f5 commit 08e5a69

File tree

3 files changed

+173
-0
lines changed

3 files changed

+173
-0
lines changed

โ€Žnumber-of-islands/Geegong.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
public class Geegong {
2+
3+
/**
4+
* 1. ํ•˜๋‚˜์”ฉ ํ›‘์–ด๊ฐ€๋ฉด์„œ 1์ด ๋˜๋Š” ์‹œ์ ์„ ์ฐพ์•„ ๊ทธ ์‹œ์ ๋ถ€ํ„ฐ dfs ๋กœ ๋ฐฉํ–ฅ๊ฐ’์„ ์ฃผ์–ด
5+
* ๋ฐฉ๋ฌธํ•œ ๊ณณ์€ 0์œผ๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ ค ๋‹ค์‹œ๋Š” ํƒ์ƒ‰ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰์•„๋ฒ„๋ฆผ
6+
* ๋ชจ๋“  ๋ฐฉํ–ฅ๊ฐ’์„ ์ฃผ๋ฉด์„œ 0์œผ๋กœ ๋ฉ”๊พผ ํ›„ 1์„ ๋ฆฌํ„ดํ•˜๊ณ  ๋ฆฌํ„ด๋œ ๊ฐ’๋“ค์„ ๋ˆ„์ ํ•˜๋ฉด ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์„ฌ์˜ ์ด ๊ฐฏ์ˆ˜๊ฐ€ ๋œ๋‹ค
7+
* time complexity : O (m*n*4) => O(m*n)
8+
* space complexity : O(m*n) // ๋”ฐ๋กœ memoization ์„ ์œ„ํ•œ ๋ณ€์ˆ˜๋Š” ์—†์œผ๋‚˜ ์žฌ๊ท€๋กœ ์ธํ•ด ์ฝœ์Šคํƒ ๋ฐœ์ƒ
9+
*/
10+
public static int[][] vectors = {{0,1}, {1,0}, {0,-1}, {-1,0}};
11+
public int numIslands(char[][] grid) {
12+
13+
int totalNumberOfIslands = 0;
14+
15+
for (int rowIdx=0; rowIdx < grid.length; rowIdx++) {
16+
for (int colIdx=0; colIdx < grid[0].length; colIdx++) {
17+
// 1์ด ๋˜๋Š” ์‹œ์ ๋ถ€ํ„ฐ ์„ฌ์ด ๋˜๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.
18+
if (grid[rowIdx][colIdx] == '1') {
19+
totalNumberOfIslands += dfs(grid, rowIdx, colIdx);
20+
}
21+
}
22+
}
23+
return totalNumberOfIslands;
24+
}
25+
26+
public int dfs(char[][] origin, int rowIdx, int colIdx) {
27+
if (rowIdx < 0 || colIdx < 0) {
28+
// ์˜๋ฏธ ์—†๋Š” ๋ฆฌํ„ด. ๋‹จ์ˆœํžˆ ์ฝœ์Šคํƒ ์ด์ „์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด ์ž„์˜๊ฐ’ ๋ฆฌํ„ด
29+
return 1;
30+
}
31+
32+
if (rowIdx >= origin.length || colIdx >= origin[0].length) {
33+
// ์˜๋ฏธ ์—†๋Š” ๋ฆฌํ„ด. ๋‹จ์ˆœํžˆ ์ฝœ์Šคํƒ ์ด์ „์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด ์ž„์˜๊ฐ’ ๋ฆฌํ„ด
34+
return 1;
35+
}
36+
37+
if (origin[rowIdx][colIdx] == '0') {
38+
// ์˜๋ฏธ ์—†๋Š” ๋ฆฌํ„ด. ๋‹จ์ˆœํžˆ ์ฝœ์Šคํƒ ์ด์ „์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด ์ž„์˜๊ฐ’ ๋ฆฌํ„ด
39+
return 1;
40+
}
41+
42+
origin[rowIdx][colIdx] = '0'; // 0 ์œผ๋กœ ์…‹ํŒ…ํ•ด์„œ ๋‹ค์Œ ์„ฌ์„ ์ฐพ์„๋•Œ ๋ฐฉ๋ฌธํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ฐฉ์–ดํ•œ๋‹ค.
43+
44+
for (int[] vector : vectors) {
45+
int moveRow = vector[0];
46+
int moveCol = vector[1];
47+
48+
dfs(origin, rowIdx + moveRow, colIdx + moveCol);
49+
}
50+
51+
// ์„ฌ์ด ๋˜๋Š” ๊ตฌ์—ญ์„ ๋‹ค ๋Œ์•˜๋‹ค๋ฉด ํ•˜๋‚˜์˜ ์„ฌ์ด ํ•˜๋‚˜ ๋œ๋‹ค๊ณ  ํŒ๋‹จ์ด ๋˜๋ฏ€๋กœ 1 ๋ฆฌํ„ด
52+
return 1;
53+
}
54+
55+
}
56+

โ€Žset-matrix-zeroes/Geegong.java

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import java.util.Arrays;
2+
3+
public class Geegong {
4+
5+
6+
/**
7+
* in-place ํ’€์ด์—ฌ์„œ matrix ์•ˆ์— 0 ์œผ๋กœ ์ฒซ๋ฒˆ์งธ row, column ์— 0์œผ๋กœ ์ฑ„์›Œ์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋งˆํ‚นํ•ด๋‘๋Š” ์‹์œผ๋กœ ํ’€์ด
8+
* time complexity : O(2MN) -> O(MN)
9+
* space complexity : O(1)
10+
* @param matrix
11+
*/
12+
public void setZeroes(int[][] matrix) {
13+
14+
// ๊ฐ€์žฅ ์ž๋ฆฌ top, left ์— 1์ด ์žˆ๋Š” ์ง€ ์ฒดํฌ
15+
// in-place ๋ผ๊ณ  ํ’€์—ˆ๋Š”๋ฐ ๊ฐ€์žฅ ์ž๋ฆฌ์— 1์ด ์žˆ๋Š”์ง€ ์ฒดํฌ๋Š” ๋ณ€์ˆ˜ ํ•œ๋‘๊ฐœ ์ •๋„๋Š” ์จ๋„ ๋˜๋Š”๋“ฏ..?
16+
boolean zeroExistsInTop = false;
17+
boolean zeroExistsInLeft = false;
18+
for (int colIndex=0; colIndex< matrix[0].length; colIndex++) {
19+
if (matrix[0][colIndex] == 0) {
20+
zeroExistsInTop = true;
21+
break;
22+
}
23+
}
24+
25+
for (int rowIndex = 0; rowIndex < matrix.length; rowIndex++) {
26+
if (matrix[rowIndex][0] == 0) {
27+
zeroExistsInLeft = true;
28+
break;
29+
}
30+
}
31+
32+
// ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์•ˆ์ชฝ์—๋งŒ ๋จผ์ € 0์œผ๋กœ ์ฑ„์›Œ์•ผ๋˜๋Š” ์ผ€์ด์Šค๋“ค์„ ๊ณจ๋ผ๋ƒ„
33+
for (int rowIndex = 1; rowIndex < matrix.length; rowIndex++) {
34+
for (int colIndex=1; colIndex < matrix[0].length; colIndex++) {
35+
36+
if (matrix[rowIndex][colIndex] == 0) {
37+
matrix[0][colIndex] = 0;
38+
matrix[rowIndex][0] = 0;
39+
}
40+
}
41+
}
42+
43+
for (int rowIndex = 1; rowIndex < matrix.length; rowIndex++) {
44+
for (int colIndex = 1; colIndex < matrix[0].length; colIndex++) {
45+
if (matrix[0][colIndex] == 0 || matrix[rowIndex][0] == 0) {
46+
matrix[rowIndex][colIndex] = 0;
47+
}
48+
}
49+
}
50+
51+
if (zeroExistsInTop) {
52+
for (int colIndex=0; colIndex<matrix[0].length; colIndex++) {
53+
matrix[0][colIndex] = 0;
54+
}
55+
}
56+
57+
if (zeroExistsInLeft) {
58+
for (int rowIndex=0; rowIndex<matrix.length; rowIndex++) {
59+
matrix[rowIndex][0] = 0;
60+
}
61+
}
62+
63+
}
64+
}
65+

โ€Žunique-paths/Geegong.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
public class Geegong {
2+
3+
/**
4+
* 1. vectors ๋ฅผ ์ •ํ•˜๊ณ  ์ด์ง„ํŠธ๋ฆฌ๋ฅผ dfs ์ฒ˜๋Ÿผ ๋ฐฉํ–ฅ์„ ์ฃผ์–ด๊ฐ€๋ฉฐ ํ›‘์–ด๊ฐ„๋‹ค.
5+
* ๊ทธ๋Ÿฐ๋ฐ time limit exceeded ใ… ใ… 
6+
* => ๋‘ ๋ฐฉํ–ฅ์œผ๋กœ ๊ณ„์† ๋ป—์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— time complexity ๊ฐ€ (m+n)^2 ๊นŒ์ง€ ๋œ๋‹ค ํก
7+
*
8+
* 2. dp ํ’€์ด ๋ฐฉ๋ฒ•, 1์ฐจ์› ๋ฐฐ์—ด๋กœ ์ƒ๊ฐํ–ˆ์„ ๋•Œ dp๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋Š” ์ธ๋ฑ์Šค๋งŒํผ์˜ row, column ๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ณ„์†ํ•ด์„œ
9+
* ๋ˆ„์ ํ•ด๊ฐ€๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ง„ํ–‰
10+
*
11+
* @param m
12+
* @param n
13+
* @return
14+
*/
15+
public static int[][] vectors = {{0,1}, {1,0}};
16+
public int uniquePaths(int m, int n) {
17+
// case 1. tle ใ… ใ… 
18+
// return dfs( 0, 0, m, n);
19+
20+
// ๋ญ”๊ฐ€ m*n ๋งŒํผ์˜ ๋ฐฐ์—ด์ด์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ ์‚ฌ์‹ค ๊ฐ row๋งˆ๋‹ค์˜ column๋“ค์— ๋ฐฉ๋ฌธํ• ๋•Œ์˜ ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅ ๊ฐฏ์ˆ˜๋ฅผ ๋ˆ„์ ํ•ด๊ฐ€๊ธฐ๋•Œ๋ฌธ์— n ๋งŒํผ๋งŒ ์žˆ์–ด๋„ ๋œ๋‹ค.
21+
int[] dp = new int[n];
22+
23+
dp[0] = 1; // ์‹œ์ž‘์ ๋ถ€ํ„ฐ path ๊ฐ€๋Šฅ ๊ฐฏ์ˆ˜ 1
24+
for(int rowIdx = 0; rowIdx < m; rowIdx++) {
25+
// 1๋ถ€ํ„ฐ ์„ธ๋Š” ์ด์œ ๋Š”... ์–ด์ฐจํ”ผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์›€์ง์ด๊ธฐ ๋•Œ๋ฌธ์˜ˆ?
26+
for(int colIdx = 1; colIdx < n; colIdx++) {
27+
// dp[colIdx - 1] : ์ง์ „ column๊ธฐ์ค€ 0์—์„œ๋ถ€ํ„ฐ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜
28+
// dp[colIdx] : rowIdx - 1์ด ์—ˆ์„๋•Œ 0์—์„œ๋ถ€ํ„ฐ [rowIdx - 1][colIdx] ๊นŒ์ง€ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜
29+
dp[colIdx] = dp[colIdx - 1] + dp[colIdx];
30+
}
31+
}
32+
33+
return dp[n - 1];
34+
}
35+
36+
// public int dfs(int startRow, int startBottom, int m, int n) {
37+
// if (startRow == m - 1 && startBottom == n - 1) {
38+
// return 1;
39+
// } else if (startRow >= m || startBottom >= n) {
40+
// return 0;
41+
// }
42+
//
43+
// int result = 0;
44+
//
45+
// for (int[] vector : vectors) {
46+
// result += dfs(vector[1] + startRow, vector[0] + startBottom, m, n);
47+
// }
48+
//
49+
// return result;
50+
// }
51+
}
52+

0 commit comments

Comments
ย (0)