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

Charlie Chaplin님의 프로필 이미지
Charlie Chaplin

작성한 질문수

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

10. 문자거리

에러 메세지가 너무 애매해요. 뭐부터 고쳐야하나요.

작성

·

251

0

풀이 방식은 다르지만, 출력 예는 일치한데, 제출하면 무슨, 오답도 아니고 그냥 런타임 에러라고만 나오네요. 제 코드는 다음과 같습니다.

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String input1 = in.next();
char input2 = in.next().charAt(0);
in.nextLine();
for (int i : new Main().solution(input1, input2)) {
System.out.print(i + " ");
}

}

private int[] solution(String input, char sample) {
List<Integer> sampleIdxes = new ArrayList<>();
final int INITIATED_SAMPLE_NUMBER = input.length() + 1;
int[] answer = new int[input.length()];

for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) == sample) {
sampleIdxes.add(i);
}
}

int min = INITIATED_SAMPLE_NUMBER;

for (int i = 0; i < input.length(); i++) {
for (int j = 0; j < sampleIdxes.size() - 1; j++) {
int temp = min;
int compare1 = Math.abs(sampleIdxes.get(j) - i);
int compare2 = Math.abs(sampleIdxes.get(j + 1) - i);
min = Math.min(temp, Math.min(compare1, compare2));
}
answer[i] = min;
min = INITIATED_SAMPLE_NUMBER;
}

return answer;
}
}

답변 1

4

  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    String input1 = in.next();
    char input2 = in.next().charAt(0);
    for (int i : new Main().solution(input1, input2)) {
      System.out.print(i + " ");
    }

지나가다 답변해드릴 수 있을거같아 답변 드립니다.

이 부분에서 in.nextLine(); 코드가 문제가 됩니다.

저희가 IDE로 쓸 때 입력값을 누른 후 Enter를 통해 실행을 하지만 사이트 내 Test 프로그램은 Enter를 통해 입력받는게 아니라 딱 입력 값만 그대로 넣어주는 방식인듯 합니다.

그래서 Test 페이지에 in.nextLine()에 아무런 값이 들어가지 않아 계속 대기 상태로 남으며 Run time Error가 발생합니다.

그냥 삭제하면 통과 될거에요.

Charlie Chaplin님의 프로필 이미지
Charlie Chaplin

작성한 질문수

질문하기