인프런 커뮤니티 질문&답변

Seokhee Park님의 프로필 이미지
Seokhee Park

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

10. 문자거리

코드를 이렇게 작성하면 문제가 될까요?

해결된 질문

작성

·

287

0

public class GetMinimumDistance {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.next();
        char ch = in.next().charAt(0);
        System.out.println(getMinimumDistance(str, ch));
        return;
    }

    public static String getMinimumDistance(String str, char ch) {
        List<Integer> distanceList = new ArrayList<Integer>();
        for(int i = 0; i < str.length(); i++) {
            String beforeStr = str.substring(0, i);
            StringBuilder sb = new StringBuilder(beforeStr);
            beforeStr = sb.reverse().toString();

            String afterStr = str.substring(i);

            int beforeDistance =  beforeStr.indexOf(ch) + 1;
            int afterDistance = afterStr.indexOf(ch);

            if(beforeStr.length() == 0 || beforeDistance == 0) beforeDistance = Integer.MAX_VALUE;
            if(afterStr.length() == 0 || afterDistance == -1) afterDistance = Integer.MAX_VALUE;

            distanceList.add(beforeDistance < afterDistance ? beforeDistance : afterDistance);
        }
        String answer = "";
        for (int dis : distanceList) {
            answer += Integer.toString(dis) + " ";
        }

        return answer.substring(0, answer.length() - 1);
    }
}

혹시 이렇게 작성하면 답은 맞는데 고쳐야 할 부분이라든가 있을까 고수님들 확인 부탁드립니다 ㅠㅠ

너무 비효율적으로 짠거 같아서요 ㅠㅠ

답변 2

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

매 문자마다 해당 문자의 위치에서 왼쪽으로 indexOf, 오른쪽으로 indexOf해서 두 리턴값 중 작은 값을 거리로 택한 아이디어가 좋습니다. 보통 이런 생각을 쉽게 할 것 같지만 사실 이런 생각을 해내는 것이 쉽지 않고 구현하는 것도 쉽지 않습니다. 잘 하신 코드입니다.

영상의 방법도 잘 익혀두세요.

Seokhee Park님의 프로필 이미지
Seokhee Park
질문자

감사합니다 선생님!

0

안녕하세요, 인프런 AI 인턴이에요.

주어진 코드를 보면, getMinimumDistance 메소드가 해당 문자열에서 주어진 문자와의 최소 거리를 구하는 기능을 가지고 있습니다. 코드 자체는 문제가 없어 보입니다.

그러나, 몇 가지 개선할 점이 있을 수 있습니다. 첫째로, 문자열 거리를 구하는 과정에서 반복문이 사용되고 있습니다. 이를 개선하기 위해 StringBuilder와 reverse 메소드를 사용할 수 있습니다. 두 번째로, 문자열을 구성하기 위해 String을 사용하고 있습니다. 이는 매번 새로운 문자열을 생성하기 때문에 성능 저하의 원인이 될 수 있습니다. 대신 StringBuilder를 사용해 문자열을 구성하면 성능이 개선될 수 있습니다.

또한, 코드를 좀 더 가독성 있게 작성하기 위해 약간의 수정이 필요합니다. 변수명을 좀 더 명확하게 지어주고, 각 단계마다 주석을 추가하는 것이 좋습니다.

이러한 개선 사항을 고려하여 코드를 수정하면 좋습니다. 하지만 현재 코드에서는 문제가 발생하거나 잘못된 결과가 나올 가능성은 보이지 않습니다.

더 나은 코드를 작성하는 방법에 대해 추가적인 정보가 필요하다면 언제든지 물어보세요. 즐거운 프로그래밍 되세요~!

Seokhee Park님의 프로필 이미지
Seokhee Park

작성한 질문수

질문하기