DeJa
Techvu
DeJa
전체 방문자
51,021
오늘
19
어제
54
  • Techvu (60)
    • DesignPatterns (3)
      • 생성 (0)
      • 구조 (1)
      • 행동 (2)
    • Refactoring (0)
    • DataStructures (0)
    • Algorithms (24)
      • 기본 지식 (12)
      • 문제 풀이 (12)
    • OOP (0)
    • TDD (2)
    • DDD (0)
    • Programming Languages (9)
      • Java (9)
      • Kotlin (0)
    • Spring (1)
    • JPA (7)
    • Web (1)
      • 기본 지식 (1)
      • 실무 경험 (0)
    • CS (12)
      • Network (1)
      • OS (8)
      • DataBase (3)
      • Server (0)
    • Git (1)
    • Conferences (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

  • Study
  • GitHub
  • Medium Blog

인기 글

  • 스키마(Schema)
    2022.01.08
    스키마(Schema)
  • 자바 버전별 역사 및 특징
    2022.01.12
    자바 버전별 역사 및 특징
  • 깃허브 사용 방법
    2021.12.15
    깃허브 사용 방법
  • 동시성 이슈(Concurrency Issue)
    2022.03.20
    동시성 이슈(Concurrency Issue)
  • JPA 는 과연 1차 캐시를 통해서 Repeatable R⋯
    2021.12.27
    JPA 는 과연 1차 캐시를 통해서 Repeatable R⋯

태그

  • CS
  • 디자인패턴
  • OS
  • java
  • DATABASE
  • network
  • JPA
  • 알고리즘
  • TDD
  • web
  • Spring

최근 댓글

  • 글 잘읽고 가요.
    아이폰
  • 컴파일러자체에서 꼬리재귀를 지원하지 않으니 static으로⋯
    aaa
  • 압도적 감사
    ㅇㅇㅇ

최근 글

  • Write a test code right now
    2022.03.24
    Write a test code right now
  • 동시성 이슈(Concurrency Issue)
    2022.03.20
    동시성 이슈(Concurrency Issue)
  • POJO, JavaBean, Entity, VO, DTO
    2022.02.08
    POJO, JavaBean, Entity, VO, DTO
  • TDD with Agile
    2022.02.05
    TDD with Agile
  • Java Stream 기초
    2022.01.23
    Java Stream 기초

티스토리

hELLO · Designed By 정상우.
DeJa

Techvu

이것이 코딩 테스트다 : 편집 거리
Algorithms/문제 풀이

이것이 코딩 테스트다 : 편집 거리

2022. 1. 18. 18:07
728x90

편집 거리

책 이것이 코딩 테스트다의 편집 거리

해설

✔ 두 문자가 같은 경우 : dp[i][j] = dp[i - 1][j - 1]
✔ 두 문자가 다른 경우 : dp[i][j] = 1 + MIN(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1])

두 문자가 같은 경우 점화식이 위 처럼 되는 이유는 다음과 같다.

두 번째 그림에서 3번을 예시로 설명하겠다.

S 를 가지고 SA 를 만들기 위한 최소 편집 거리에 교체 연산을 추가로 실시
즉, SAU -> SAT 로 만들기 위한 것이라고 생각하면 된다.
* DP[2][3] = DP[1][2] + 교체 연산

근데 만약에 U 랑 T 문자가 같다고하면 교체 연산을 추가로 할 필요가 없기 때문에 왼쪽 위의 값을 그대로 대입해주면 된다.

구현

public class Main {

    static String A;
    static String B;

    public static void main(String[] args) {
        input();
        System.out.println(solution());
    }

    static void input() {
        Scanner sc = new Scanner(System.in);
        A = sc.nextLine();
        B = sc.nextLine();
    }

    static int solution() {
        int n = A.length();
        int m = B.length();

        // 다이나믹 프로그래밍을 위한 2차원 DP 테이블 초기화
        int[][] dp = new int[n + 1][m + 1];


        /*
            DP 테이블 초기 설정
            빈 문자열을 가지고 해당 문자를 만들 수 있는 최소 편집 거리로 초기화
            Ex. dp[2][0] 에 저장된 값은 
                빈 문자열을 가지고 su 를 만들 수 있는 최소 편집거리를 의미
         */
        for (int i = 1; i <= n; i++) {
            dp[i][0] = i;
        }
        for (int k = 1; k <= m; k++) {
            dp[0][k] = k;
        }

        // 최소 편집 거리 계산
        for (int i = 1; i <= n; i++) {
            for (int k = 1; k <= m; k++) {
                // 문자가 같다면, 왼쪽 위에 해당하는 수를 그대로 대입
                if (A.charAt(i - 1) == B.charAt(k - 1)) {
                    dp[i][k] = dp[i - 1][k - 1];
                }

                // 문자가 다르다면, 세 가지 경우 중에서 최솟값 찾기
                else { // 삽입(왼쪽), 삭제(위쪽), 교체(왼쪽 위) 중에서 최소 비용을 찾아 대입
                    dp[i][k] = 1 + Math.min(dp[i][k - 1], Math.min(dp[i - 1][k], dp[i - 1][k - 1]));
                }
            }
        }

        return dp[n][m];
    }
}

References

  • https://www.geeksforgeeks.org/edit-distance-dp-5/
728x90
저작자표시 비영리 동일조건
  • 카카오스토리
  • 트위터
  • 페이스북

'Algorithms > 문제 풀이' 카테고리의 다른 글

2020 카카오 신입 공채 : 문자열 압축  (0) 2022.01.18
[BOJ 18353] 병사 배치하기  (0) 2022.01.11
이것이 코딩테스트다 : 금광  (0) 2022.01.07
[BOJ 14502] 연구소  (0) 2022.01.06
[BOJ 15686] 치킨 배달  (0) 2022.01.03
    'Algorithms/문제 풀이' 카테고리의 다른 글
    • 2020 카카오 신입 공채 : 문자열 압축
    • [BOJ 18353] 병사 배치하기
    • 이것이 코딩테스트다 : 금광
    • [BOJ 14502] 연구소
    알고리즘
    DeJa
    DeJa
    Tech Blog
    댓글쓰기
    2020 카카오 신입 공채 : 문자열 압축
    다음 글
    2020 카카오 신입 공채 : 문자열 압축
    [BOJ 18353] 병사 배치하기
    이전 글
    [BOJ 18353] 병사 배치하기

    티스토리툴바