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

Am1217님의 프로필 이미지
Am1217

작성한 질문수

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

4. 단어 뒤집기(StringBuilder이용법 또는 직접뒤집기)

이 풀이방법 혹시 틀렸을까요?

작성

·

111

0

public class Number4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();
        List<String> array = new ArrayList<>();
        for (int i = 0; i <= count; i++) {
            array.add(scanner.nextLine());
        }
        for (String str : array) {
            Deque<Character> stack = new ArrayDeque<>();
            for ( char c : str.toCharArray()){
                stack.push(c);
            }
            while (!stack.isEmpty()){
                System.out.print(stack.pop());
            }
            System.out.println();
        }
    }
}

 

위 풀이방법처럼 풀었는데 이게 컴파일 에러가 나는데 혹시 이 풀이방법이 문제점을 가지고 있을까요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

담당님의 코드를 확인해보니, 컴파일 에러가 나는 이유는 Scanner 사용 시, 첫 번째 nextInt() 호출 후 바로 nextLine()을 호출하는 경우 발생할 수 있는 문제로 보입니다. nextInt() 메소드는 정수만 읽고, 줄바꿈 문자는 그대로 입력 스트림에 남겨둡니다. 그래서 다음 nextLine() 호출 때, 실제로 사용자가 의도한 데이터를 입력하기 전에 남아있던 줄바꿈 문자를 만나고 입력이 종료되는 것처럼 동작하기 때문입니다.

해당 문제를 해결하기 위해서는 nextInt() 호출 직후 nextLine()을 한 번 더 호출하여 입력 스트림에서 남아있는 줄바꿈 문자를 명시적으로 소비하는 것이 좋습니다. 이렇게 수정하면 정상적으로 문자열을 입력받을 수 있습니다.

다음은 수정된 코드의 예시입니다:

public class Number4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();
        scanner.nextLine(); // 이 부분을 추가하여 남아있는 줄바꿈 문자를 소비합니다.
        List<String> array = new ArrayList<>();
        for (int i = 0; i < count; i++) { // i <= count에서 i < count로 변경해야 하는 것을 추천드립니다.
            array.add(scanner.nextLine());
        }
        for (String str : array) {
            Deque<Character> stack = new ArrayDeque<>();
            for (char c : str.toCharArray()) {
                stack.push(c);
            }
            while (!stack.isEmpty()) {
                System.out.print(stack.pop());
            }
            System.out.println();
        }
    }
}

또한, 배열을 추가하는 반복문에서 사용한 조건 i <= count 대신 i < count를 사용해야 지정한 개수만큼 정확히 입력을 받을 수 있습니다. 첫 번째 nextInt()로 입력받은 count는 배열에 저장할 문자열의 수를 의미하므로, 반복문의 조건을 i < count로 설정하여 정확히 count 횟수만큼 입력을 받아야 합니다.

Am1217님의 프로필 이미지
Am1217

작성한 질문수

질문하기