[Silver4] 문자열(Java)

bearMin·2024년 2월 14일

🎯문제

길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다.

두 문자열 A와 B가 주어진다. 이때, A의 길이는 B의 길이보다 작거나 같다. 이제 A의 길이가 B의 길이와 같아질 때 까지 다음과 같은 연산을 할 수 있다.

A의 앞에 아무 알파벳이나 추가한다.
A의 뒤에 아무 알파벳이나 추가한다.
이때, A와 B의 길이가 같으면서, A와 B의 차이를 최소로 하는 프로그램을 작성하시오.

입력
첫째 줄에 A와 B가 주어진다. A와 B의 길이는 최대 50이고, A의 길이는 B의 길이보다 작거나 같고, 알파벳 소문자로만 이루어져 있다.

출력
A와 B의 길이가 같으면서, A와 B의 차이를 최소가 되도록 했을 때, 그 차이를 출력하시오.


✏️풀이

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 최솟값
        int min = 51;
        // 입력값
        String[] arr = br.readLine().split(" ");

        for(int i = 0; i <= arr[1].length() - arr[0].length(); i++) {
        	// 문자열의 길이 조정
            String B = arr[1].substring(i);
            // A와 B의 차이
            int temp = 0;
            
            for(int j = 0; j < arr[0].length(); j++) {
            	// 차이가 있다면 temp 증가
                if(B.charAt(j) != arr[0].charAt(j)) {
                    temp++;
                }
            }
            
            // 최솟값 비교
            min = Math.min(temp, min);
        }

        System.out.println(min);
    }
}

설명

반복을 통해서 문제를 해결했다.

나올 수 있는 문자열의 길이는 최대 50이기 때문에 최솟값인 min을 51로 설정해주었다.
문자열 A와 B를 빈칸을 두고 한 줄로 입력을 받기 때문에 split을 통해 문자열을 나눠준다.

이후 반복을 진행하는데 문자열의 길이가 같아야하므로 문자열 B에 해당하는 arr[1].length와 문자열 A에 해당하는 arr[0].length의 차이를 통해 반복의 횟수를 결정한다.

이후 substring을 통해 문자열을 나눠서 비교를 진행한다.
예를 들어, A = "ABC"이고 B = "ABCD"일 때
ABC와 BCD 두번의 비교를 진행해서 최솟값을 비교해줘야한다.

시작 위치만 바꾸는 이유는 A의 문자열의 길이만큼 반복해주면 "ABCD"이더라도 ABC까지만 비교 반복을 진행할 수 있기 때문이다.

반복을 통해 A와의 차이를 temp에 저장하고 반복이 끝난 뒤에 Math.min을 사용하여 최솟값을 비교한 뒤 min에 저장해준다.

위의 과정을 반복을 마친 뒤에 min 값을 출력해주면 문제를 해결할 수 있다.


💡느낀 점

만약 문제를 많이 풀어보지 않았다면, substring을 사용할 생각을 하지 못했을 것 같다. 지금까지 꾸준히 문제를 풀면서 여러 함수들을 사용하였고 substring 역시 그때 배워서 이번에 잘 사용할 수 있었던 것 같다. 문제를 해결하는 능력에는 아이디어뿐만 아니라 배운 함수들을 잘 사용하는 것 역시 매우 중요한 것 같다.


링크

문제 링크

profile
소소한 공부기록

0개의 댓글