Skip to content

Commit 4f793f1

Browse files
committed
[백준] 받아 쓰기 / 골드 3 / 80분
https://www.acmicpc.net/problem/20542
1 parent 198c9df commit 4f793f1

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
N, M = map(int, input().split())
2+
inp = input()
3+
answer = input()
4+
5+
dp = [[0] * (M + 1) for _ in range(N + 1)]
6+
7+
for i in range(N + 1):
8+
for j in range(M + 1):
9+
10+
if i == 0 or j == 0:
11+
if i == 0 and j == 0:
12+
continue
13+
# 빈 문자열에서 정답 문자열을 만드는 최소 편집 거리
14+
if i == 0 and j != 0:
15+
dp[i][j] = dp[i][j - 1] + 1
16+
# 빈 문자열에서 답안 문자열을 만드는 최소 편집 거리
17+
if i != 0 and j == 0:
18+
dp[i][j] = dp[i - 1][j] + 1
19+
else:
20+
# 비교 문자가 같은지 아닌지 판단
21+
if inp[i-1] == answer[j-1]:
22+
# 같으면 좌상단 대각선 값을 그대로 가져옴
23+
dp[i][j] = dp[i - 1][j - 1]
24+
else:
25+
# 비교 문자가 달라도 i나 v를 휘갈겨 쓴 경우
26+
if inp[i-1] == 'i':
27+
if answer[j-1] == 'l' or answer[j-1] == 'j':
28+
dp[i][j] = dp[i - 1][j - 1]
29+
continue
30+
elif inp[i-1] == 'v':
31+
if answer[j-1] == 'w':
32+
dp[i][j] = dp[i - 1][j - 1]
33+
continue
34+
35+
# 비교문자가 다른 경우 위, 좌측, 좌상단 대각선 값 중 최소값을 선택한 후 1을 더해준다.
36+
dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - 1], dp[i][j - 1]) + 1
37+
38+
print(dp[N][M])

0 commit comments

Comments
 (0)