[코딩테스트] 가장 짧은 문자거리

gyeol·2023년 7월 27일

코딩테스트 공부

목록 보기
6/53
post-thumbnail

김태원 님의 '자바(Java) 알고리즘 문제풀이 입문: 코딩테스트' 강의를 보고 정리한 글입니다.

1-10. 가장 짧은 문자거리

설명

한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램을 작성하세요.

입력
첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.
문자열의 길이는 100을 넘지 않는다.

출력
입력 - teachermode e
출력 - 1 0 1 2 1 0 1 2 2 1 0

일단 문자열과 문자를 입력받은 후 solution 함수를 호출해준다.
정답을 정수배열로 출력할 것이기 때문에 문자열 길이만큼의 정수형 배열을 선언해줍니다.
그리고 임의의 숫자를 정해준뒤 오른쪽에서 한번, 왼쪽에서 한번 문자 t와 떨어진 거리를 측정합니다. 오른쪽에서 먼저 정수형 배열 answer안에 값들을 넣어주고, 왼쪽에서 한번 더 거리를 측정할 때 오른쪽에서 측정한 거리보다 왼쪽에서 측정한 값이 작으면 answer 배열의 값을 바꿔줍니다.

package section1;

import java.util.Scanner;

public class Test10 {
    public int[] solution(String s, char c){
        int[] answer = new int[s.length()];
        int p = 1000;
        
       for(int i=0; i<s.length(); i++){
            if(s.charAt(i) == c){
                p = 0;
                answer[i] = p;
            }
            else{
                p++;
                answer[i] = p;
            }
       }


        p = 1000;

        for(int i=s.length()-1; i>=0; i--){
                if(s.charAt(i) == c){
                    p = 0;
                }
                else{
                    p++;
                    answer[i] = Math.min(answer[i], p);
                }
                
        }

        return answer;
    }

    public static void main(String[] args) {
        Test10 t = new Test10();
        Scanner in = new Scanner(System.in);

        String str = in.next();
        char alp = in.next().charAt(0);

        for (int x : t.solution(str, alp)) {
            System.out.print(x + " ");
        }
        
    }
}

어려웠던 점

저번 문제도 그렇고 배열로 다루는 문제들에 어려움을 겪는 것 같다.
반복문을 돌려 각각의 거리를 구하려는 시도는 하였으나, 반복문을 두번(오른쪽으로 한번, 왼쪽으로 한번)을 돌릴 생각은 하지 않았다. 반복문이 두개라면 코드가 너무 길어지니 런타임 에러가 생길 것 같아 반복문 하나로 끝낼 생각을 하니 어려움이 컸던 것 같다.
그리고 두번째 반복문에서 최소값을 구할 때 Math.min(answer[i], p) 이런식으로 한줄로 줄일 수 있었는데, if문을 써서 비교를 하려하였다. 다시 한번 Math 라이브러리를 상기시킬 수 있었다.

profile
공부 기록 공간 '◡'

0개의 댓글