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

envy1274님의 프로필 이미지
envy1274

작성한 질문수

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

9. 숫자만 추출

혼자 코드를 짜봤는데

작성

·

487

·

수정됨

0

안녕하세요. 강사님

자료구조 공부하다가 방금 전 숫자만 추출하는 강의를 보고 이번 강의에서 응용해 보았는데 출력 값은 동일하나 채점 사이트에서는 오답이라고 나와서 어떤 부분에서 틀렸으며 어떻게 고쳐야 할까요?

완전 코드를 잘못 구현했다면 제가 설명에서 어느 부분을 이해하지 못한 것일 까요?

 

import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;

public class Main {
    public int solution(String s) {
        String answer = "";
        s = s.replaceAll("[^0-9]", ""); // 숫자만 추출

        
        while (s.length() > 0 && s.charAt(0) == '0') {
            s = s.substring(1);
        }

        Deque<Character> deque = new LinkedList<>(); // Deque 선언 (제네릭 타입 명시)

        // 문자열 s의 각 자리를 Deque에 추가
        for (int i = 0; i < s.length(); i++) {
            deque.offer(s.charAt(i));
        }

        // Deque에서는 0 제거 이후
        while (!deque.isEmpty()) {
            char c = deque.peek();
            if (c != '0') {
                answer += c;
            }
            deque.poll();
        }
        return Integer.parseInt(answer);
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();

        System.out.println(T.solution(str));
    }
}

위 코드는 오류가 나고

 

아래 코드는 컴파일 에러가 납니다.

import java.util.Scanner;

public class Main {
    public int solution(String s) {
        String answer = "";
        s = s.replaceAll("[^0-9]", ""); // 숫자만 추출

        while (s.length() > 0 && s.charAt(0) == '0') {
            answer = s.substring(1);
        }
        return Integer.parseInt(answer);
    }

    public static void main(String[] args) {
        StringTest1_9 T = new StringTest1_9();
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();

        System.out.println(T.solution(str));
    }
}

 

답변 1

0

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

안녕하세요^^

  1. 첫 번째 코드는 제일 앞에 있는 0만 제거해야 하는데 모든 '0'을 다 제거합니다. 만약 203이 답이라면 이 코드는 23을 답으로 합니다. 채점사이트에서 오답이 났을 경우 확인하는 방법이 강의소개란에 있습니다. 앞으로 오답이 나면 사용해 보세요.

  2. 두 번째 코드는 T객체 생성을 클래스 이름인 Main으로 하지 않아서 에러가 납니다. 그리고 solution에서 answer에 아무 값도 안들어 가는 경우도 생기는 코드입니다. 아래처럼 하는게 좋을 것 같네요.

        answer = s.replaceAll("[^0-9]", ""); // 숫자만 추출

        while (answer.length() > 0 && answer.charAt(0) == '0') {
            answer = s.substring(1);
        }
envy1274님의 프로필 이미지
envy1274

작성한 질문수

질문하기