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

취업화이팅님의 프로필 이미지
취업화이팅

작성한 질문수

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

10. 문자거리

혼자 푼 방법에서 2번이 런타임에러가 나오는데 어디가 문제인지 알고 싶습니다.

작성

·

125

0

우선 설명해주신 방법을 이해하였는데 강의를 듣기전 혼자 풀어본 방법으로는 주어진 알파벳의 위치를 담는 list를 만들어 넣어 놓고 이후에 문자에서 해당 알파벳이 아니면 그 문자의 위치가 리스트의 위치에 해당하는 값과의 차를 구하여 절대값을 씌워 구하게 하였습니다.

문제는 채점중 2번 문제가 런타임 에러가 나오는데 어느 부분에서 문제가 되는지 알고 싶습니다!

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        String word = in.next();
        Character standard = in.next().charAt(0);

        List<Integer> position = new ArrayList<>();


        for (int i=0; i<word.length(); i++){
            if(word.charAt(i) == standard)
                position.add(i);
        }

        int lf = 0;
        String result = "";
        int check = 0;

        for(int i=0; i<word.length(); i++){
            if(word.charAt(i) == standard) {
                result += "0";
                if(check != 0)
                    lf++;
                check = 1;
            }
            else{
                int left = Math.abs(position.get(lf)-i);
                int right = Math.abs(position.get(lf+1)-i);
                if(left>right)
                    result += right;
                else
                    result += left;

            }

            if(i == word.length()-1)
                break;
            else
                result += " ";

        }

        System.out.println(result);

    }
}


답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 취업화이팅님.

질문하신 코드에서 런타임 에러의 원인은 아마도 알파벳의 위치를 찾는 과정에서 position.get(lf+1) 호출 시 리스트의 범위를 벗어날 가능성이 큽니다. 주어진 알파벳이 문자열의 마지막에 있거나, 아예 알파벳이 문자열 내에 1개만 존재하는 경우 lf+1에 해당하는 위치가 리스트에 존재하지 않아 IndexOutOfBoundsException이 발생할 수 있습니다.

이와 유사한 문제를 해결한 다른 학생의 질문과 해당 해결 방안을 공유드립니다. 다음은 문자에서 특정 알파벳으로부터의 거리를 구하는 문제와 관련된 질문 및 해결책을 담고 있습니다.

해당 질문에서는 문자열 내 특정 문자로부터의 최소 거리를 구하는 문제를 다루고 있으며, 질문자는 자신만의 방식으로 문제를 해결하였습니다. 강사님께서는 제출된 코드를 긍정적으로 평가하며, 문제 해결 방식에 대해 리뷰를 제공하시는데, 이는 대량의 데이터에 대해 최적화된 방법으로 접근하는 방법도 고려해볼 것을 조언하고 있습니다.

런타임 에러를 피하기 위해서는 리스트의 크기를 항상 확인하고, position.get(lf+1)과 같은 호출이 가능한지 여부를 체크하는 로직을 추가하는 것이 좋습니다. 예를 들어, lf+1 < position.size()와 같은 조걸을 통해 리스트의 범위를 넘어서지 않도록 보장해야 합니다.

또한, 공유된 링크에서 제공된 코드와 강사님의 조언을 참고하여 문제의 다양한 해결 방법을 고민해보는 것도 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

취업화이팅님의 프로필 이미지
취업화이팅

작성한 질문수

질문하기