Skip to content

Commit 061135f

Browse files
authored
feat: 1월 3주차 발제 문제 내용
1 parent 461e3e6 commit 061135f

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
'''
2+
BOJ #20542. 받아 쓰기 (골드3)
3+
https://www.acmicpc.net/problem/20542
4+
유형: Dynamic Programming(DP), 문자열
5+
'''
6+
7+
N, M = map(int, input().split())
8+
inp = input()
9+
answer = input()
10+
11+
dp = [[0] * (M + 1) for _ in range(N + 1)]
12+
13+
for i in range(N + 1):
14+
for j in range(M + 1):
15+
16+
if i == 0 or j == 0:
17+
if i == 0 and j == 0:
18+
continue
19+
# 빈 문자열에서 정답 문자열을 만드는 최소 편집 거리
20+
if i == 0 and j != 0:
21+
dp[i][j] = dp[i][j - 1] + 1
22+
# 빈 문자열에서 답안 문자열을 만드는 최소 편집 거리
23+
if i != 0 and j == 0:
24+
dp[i][j] = dp[i - 1][j] + 1
25+
else:
26+
# 비교 문자가 같은지 아닌지 판단
27+
if inp[i-1] == answer[j-1]:
28+
# 같으면 좌상단 대각선 값을 그대로 가져옴
29+
dp[i][j] = dp[i - 1][j - 1]
30+
else:
31+
# 비교 문자가 달라도 i나 v를 휘갈겨 쓴 경우
32+
if inp[i-1] == 'i':
33+
if answer[j-1] == 'l' or answer[j-1] == 'j':
34+
dp[i][j] = dp[i - 1][j - 1]
35+
continue
36+
elif inp[i-1] == 'v':
37+
if answer[j-1] == 'w':
38+
dp[i][j] = dp[i - 1][j - 1]
39+
continue
40+
41+
# 비교문자가 다른 경우 위, 좌측, 좌상단 대각선 값 중 최소값을 선택한 후 1을 더해준다.
42+
dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - 1], dp[i][j - 1]) + 1
43+
44+
print(dp[N][M])
578 KB
Binary file not shown.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'''
2+
BOJ #5582. 공통 부분 문자열(골드5)
3+
https://www.acmicpc.net/problem/5582
4+
유형: Dynamic Programming(DP), 문자열
5+
'''
6+
7+
string1 = input()
8+
string2 = input()
9+
10+
dp = [[0] * len(string1) for _ in range(len(string2))]
11+
12+
for i in range(len(string2)):
13+
for j in range(len(string1)):
14+
# 두 문자열의 i번째 문자와 j번째 문자가 같을때
15+
if string2[i] == string1[j]:
16+
if i > 0 and j > 0:
17+
dp[i][j] = dp[i-1][j-1] + 1
18+
else:
19+
dp[i][j] = 1
20+
else:
21+
dp[i][j] = 0
22+
23+
# dp테이블에서 최댓값 찾기
24+
print(max(max(row) for row in dp))

0 commit comments

Comments
 (0)