Skip to content

Commit 7473071

Browse files
committed
2 parents 1e7c7f2 + 59d95cd commit 7473071

File tree

5 files changed

+134
-0
lines changed

5 files changed

+134
-0
lines changed

2020/02/20200223.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# 2020. 02. 23
2+
3+
## 오늘의 문제 :
4+
M x N 크기의 양의 정수 매트릭스와 비용(cost)가 주어졌을 때, 주어진 비용으로 매트릭스의 시작 위치 (0, 0)에서 마지막 위치 (M-1, N-1)까지 도달하는 경로의 수를 구하시오.
5+
6+
매트릭스에서 이동한 경로의 비용은 거쳐간 셀 값의 합이다.
7+
8+
매트릭스에서는 오직 오른쪽 한 칸 또는 아래쪽 한 칸으로만 이동할 수 있다.
9+
10+
즉, 셀 (i, j)에서는 (i, j+1) 또는 (i+1, j)로 이동할 수 있다.
11+
12+
- Input
13+
```
14+
[[4, 7, 1, 6],
15+
[5, 7, 3, 9],
16+
[3, 2, 1, 2],
17+
[7, 1, 6, 3]]
18+
cost = 25
19+
```
20+
- Output : 2 (두 가지 경로는 4-7-1-3-1-6-3, 4-5-7-3-1-2-3)
21+
22+
## 풀이 :
23+
24+
## 소스코드 :

2020/03/20200301.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# 2020. 03. 01
2+
3+
## 오늘의 문제 :
4+
가장 긴 바이토닉 부분 수열 문제(Longest Bitonic Subsequence Problem)는 주어진 배열에서 우선 값이 증가했다가
5+
그 후 감소하는 원소들의 집합 중 가장 긴 부분 수열을 찾는 문제입니다.
6+
7+
배열이 주어졌을 때, 가장 긴 바이토닉 부분 수열을 찾으시오.
8+
9+
부분 수열은 주어진 배열 원소들의 순서를 유지하는 원소들의 집합입니다.
10+
11+
연속된 원소들이 선택될 필요는 없습니다.
12+
13+
단, 증가만 하거나 감소만 하는 부분 수열도 답이 될 수 있습니다.
14+
15+
16+
17+
- Input: [4, 2, 5, 9, 7, 6, 10, 3, 1]
18+
- Output: [4, 5, 9, 7, 6, 3, 1]
19+
20+
21+
- Input: [1, 2, 3, 4, 5]
22+
- Output: [1, 2, 3, 4, 5]
23+
24+
25+
- Input: [5, 4, 3, 2, 1]
26+
- Output: [5, 4, 3, 2, 1]
27+
28+
29+
## 풀이 :
30+
31+
## 소스코드 :
32+

2020/03/20200308.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# 2020. 03. 08
2+
3+
## 오늘의 문제 :
4+
5+
양의 정수 배열과 정수 s가 주어졌을 때, 합이 s가 되는 원소들의 조합이 있는지 찾으시오.
6+
7+
Input: A = { 7, 3, 2, 5, 8 }, s = 14
8+
Output: Yes (7, 2, 5)
9+
10+
## 풀이 :
11+
12+
## 소스코드 :
13+

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@
3030
- [2020. 01. 26](2020/01/20200126.md)
3131
- [2020. 02. 02](2020/02/20200202.md)
3232
- [2020. 02. 09](2020/02/20200209.md)
33+
- [2020. 02. 23](2020/02/20200223.md)
34+
- [2020. 03. 01](2020/03/20200301.md)
35+
- [2020. 03. 08](2020/03/20200308.md)
36+
3337

3438
## ▶️ 예제 실행
3539

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package dev.haenara.mailprogramming.solution.y2020.m02.d23
2+
3+
import dev.haenara.mailprogramming.solution.Solution
4+
5+
/**
6+
* 매일프로그래밍 2020. 02. 23
7+
*
8+
* M x N 크기의 양의 정수 매트릭스와 비용(cost)가 주어졌을 때,
9+
* 주어진 비용으로 매트릭스의 시작 위치 (0, 0)에서 마지막 위치 (M-1, N-1)까지 도달하는 경로의 수를 구하시오.
10+
* 매트릭스에서 이동한 경로의 비용은 거쳐간 셀 값의 합이다.
11+
* 매트릭스에서는 오직 오른쪽 한 칸 또는 아래쪽 한 칸으로만 이동할 수 있다.
12+
* 즉, 셀 (i, j)에서는 (i, j+1) 또는 (i+1, j)로 이동할 수 있다.
13+
*
14+
* Input
15+
* [[4, 7, 1, 6],
16+
* [5, 7, 3, 9],
17+
* [3, 2, 1, 2],
18+
* [7, 1, 6, 3]]
19+
* cost = 25
20+
*
21+
* Output
22+
* 2 (두 가지 경로는 4-7-1-3-1-6-3, 4-5-7-3-1-2-3)
23+
*
24+
* 풀이
25+
*
26+
*/
27+
28+
class Solution200223 : Solution<Solution200223.Input, Int>{
29+
private var count = 0
30+
private lateinit var map : Array<Array<Int>>
31+
private var cost = 0
32+
33+
override fun solution(input : Input) : Int {
34+
map = input.map
35+
cost = input.cost
36+
return goRightOrDown(0, 0)
37+
}
38+
39+
private fun goRightOrDown(x : Int, y : Int, costSum : Int = 0) : Int {
40+
val sum = costSum + map[y][x]
41+
if (x == map[y].lastIndex && y == map.lastIndex) {
42+
return if (sum == cost) {
43+
1
44+
} else {
45+
0
46+
}
47+
} else if (x == map[y].lastIndex) {
48+
// move down
49+
return goRightOrDown(x, y + 1, sum)
50+
} else if (y == map.lastIndex) {
51+
// move right
52+
return goRightOrDown(x + 1, y, sum)
53+
} else {
54+
// move right and down
55+
return goRightOrDown(x + 1, y, sum) + goRightOrDown(x, y + 1, sum)
56+
}
57+
}
58+
59+
class Input(val map : Array<Array<Int>>, val cost : Int)
60+
}
61+

0 commit comments

Comments
 (0)