|
| 1 | +package leetcode_study |
| 2 | + |
| 3 | +/* |
| 4 | +* ์ฃผ์ด์ง ๋์ด์์ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ๋ฉด์ ์ ๊ตฌํ๋ ๋ฌธ์ . |
| 5 | +* Brute force๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ๊ฐ๋ฉฐ ์ต๋ ๋ฉด์ ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ. |
| 6 | +* ์ฃผ์ด์ง ๋์ด(n)์ ๊ฐ์๋ 2 ๋ณด๋ค ํฌ๊ฑฐ๊ฐ ๊ฐ๊ณ 10^4 ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์. |
| 7 | +* ์ด์ค Loop์ผ๋ก ํด๊ฒฐํ ๊ฒฝ์ฐ ์๊ฐ ์ด๊ณผ ๋ฐ์ (10^8 ์ดํ๋ก ํด๊ฒฐํด์ผ ์ ํ ์๊ฐ ์์ผ๋ก ๋ฌธ์ ํด๊ฒฐ ๊ฐ๋ฅ) |
| 8 | +* |
| 9 | +* ์๊ฐ ๋ณต์ก๋: O(n^2) |
| 10 | +* -> ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ๋์ด๋ฅผ ๊ตฌํ๊ธฐ ์ํด ์ด์ค ๋ฐ๋ณต๋ฌธ ์คํ: O(n^2) |
| 11 | +* ๊ณต๊ฐ ๋ณต์ก๋: O(1) |
| 12 | +* -> ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์์. |
| 13 | +* */ |
| 14 | +fun maxArea01(height: IntArray): Int { |
| 15 | + var maxValue = 0 |
| 16 | + for (i in 0 until height.size) { |
| 17 | + for (j in i + 1 until height.size) { |
| 18 | + // ๋๋น๋ ๋ ์ ๋ถ ์ฌ์ด์ ๊ฑฐ๋ฆฌ |
| 19 | + val width = j - i |
| 20 | + // ๋์ด๋ ๋ ์ ๋ถ ์ค ์์ ๊ฐ |
| 21 | + val containerHeight = Math.min(height[i], height[j]) |
| 22 | + // ๋ฉด์ ๊ณ์ฐ |
| 23 | + val area = width * containerHeight |
| 24 | + // ์ต๋๊ฐ ๊ฐฑ์ |
| 25 | + maxValue = Math.max(maxValue, area) |
| 26 | + } |
| 27 | + } |
| 28 | + return maxValue |
| 29 | +} |
| 30 | + |
| 31 | +/* |
| 32 | +* ์ด์ค ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ๋ฌธ์ ํ์ด. |
| 33 | +* ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ๋ ์กฐ๊ฑด๊ณผ ์์ |
| 34 | +* -> ๋์ด์ ์์น๋ฅผ ๋ํ๋ด๋ ์ผ์ชฝ๊ฐ๊ณผ ์ค๋ฅธ์ชฝ ๊ฐ์์ ๋ ๊ฐ ์ค ์์ ๊ฐ์ด ๋์ด๊ฐ ๋ ์ ์์. |
| 35 | +* -> ์ค๋ฅธ์ชฝ์ ๊ฐ์ ์ผ์ชฝ ๊ฐ๋ณด๋ค ์์ ์ ์์. |
| 36 | +* -> ๋๋น ๊ฐ์ ์ค๋ฅธ์ชฝ ์ธ๋ฑ์ค์์ ์ผ์ชฝ ์ธ๋ฑ์ค๋ฅผ ๋บ ๊ฐ์. |
| 37 | +* |
| 38 | +* ์๊ฐ ๋ณต์ก๋: O(n) |
| 39 | +* -> ์ฃผ์ด์ง ๋์ด ๋ฐฐ์ด์์ ์์ชฝ ๋ ๊ฐ์ ์ฆ๊ฐ/๊ฐ๊ฐ ํด๊ฐ๋ฉฐ ๋ฐ๋ณต ์งํ: O(n) |
| 40 | +* ๊ณต๊ฐ ๋ณต์ก๋: O(1) |
| 41 | +* -> ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์์. |
| 42 | +* */ |
| 43 | +fun maxArea02(height: IntArray): Int { |
| 44 | + var maxValue = 0 |
| 45 | + var left = 0 |
| 46 | + var right = height.size - 1 |
| 47 | + while (left <= right) { |
| 48 | + val width = right - left |
| 49 | + val containerHeight = Math.min(height[left], height[right]) |
| 50 | + val area = width * containerHeight |
| 51 | + maxValue = Math.max(maxValue, area) |
| 52 | + if (height[left] < height[right]) { |
| 53 | + left++ |
| 54 | + } else { |
| 55 | + right-- |
| 56 | + } |
| 57 | + } |
| 58 | + return maxValue |
| 59 | +} |
0 commit comments