inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

10. 문자거리

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

해결된 질문

362

박석희

작성한 질문수 3

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);
    }
}

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

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

java 코딩-테스트

답변 2

0

김태원

안녕하세요^^

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

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

0

박석희

감사합니다 선생님!

0

인프런 AI 인턴

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

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

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

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

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

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

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

29

1

갑자기 채점 사이트가 바뀌었어요

0

32

1

문제 리스트 페이지

0

29

1

채점 사이트 관련 질문드립니다

0

24

1

봉우리 문제 질문입니다

0

81

2

씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?

0

65

0

이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?

0

72

0

가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법

0

67

1

좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ

0

85

2

6-7 강의에서

0

48

1

6-6. 장난꾸러기 질문 있습니다.

0

45

1

강의 수강후 코딩테스트

0

110

1

answer 변수 사용 여부

0

45

1

2중 for문

1

85

2

2-11. 임시반장정하기 (Runtime Error)

0

63

1

혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?

0

70

1

이런 풀이는 어떨까요

0

44

1

자바 스트림 방식의 효율성 질문 드립니다.

0

57

1

알고리즘 자료 구조들..

0

62

1

StringBuilder vs BufferdWriter

0

48

1

원더랜드(프림)

0

50

1

이런 코드는 어떤가요?

0

61

1

bfs 풀이

0

57

1

병합정렬

0

56

1