영어가 싫어요

이윤설·2024년 2월 5일

제출 코드

class Solution {
    public long solution(String numbers) {
        char[] array = numbers.toCharArray();
        // "" 안붙이면 에러 발생함
        String sample = ""; 
        String newSample = "";

        for (int i = 0; i < array.length; i++) {
            sample += array[i];
            // 검증
            newSample = convert(sample);
        }
        long answer = Long.parseLong(newSample);
        return answer;
    }

    public String convert(String sample) {
        if (sample.contains("one")) {
            sample = sample.replace("one", "1");
        }
        if (sample.contains("two")) {
            sample = sample.replace("two", "2");
        }
        if (sample.contains("three")) {
            sample = sample.replace("three", "3");
        }
        if (sample.contains("four")) {
            sample = sample.replace("four", "4");
        }
        if (sample.contains("five")) {
            sample = sample.replace("five", "5");
        }
        if (sample.contains("six")) {
            sample = sample.replace("six", "6");
        }
        if (sample.contains("seven")) {
            sample = sample.replace("seven", "7");
        }
        if (sample.contains("eight")) {
            sample = sample.replace("eight", "8");
        }
        if (sample.contains("nine")) {
            sample = sample.replace("nine", "9");
        }
        if (sample.contains("zero")) {
            sample = sample.replace("zero", "0");
        }
        return sample;
    }
}

아주 노가다적인 코드이다. 어떻게 하면 스마트하게 바꿀 수 있을까?

모범답안

class Solution {
    public long solution(String numbers) {

            String[] numbers_arr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

            for (int i = 0; i < numbers_arr.length; i++) {
                numbers = numbers.replaceAll(numbers_arr[i], String.valueOf(i));
            }

            long answer = Long.parseLong(numbers);
            return answer;
        }
}
  • numbers를 대상으로 replaceAll() 함수를 실행한다.
    반복문을 통해 numbers에 numbers_arr에 해당하는 문자열이 있으면 해당 인덱스로 변경한다.

정리

1) replaceAll()

  • String replaceAll(String regex, String replacement)
  • replaceAll() 함수는 대상 문자열을 원하는 문자 값으로 변환하는 함수이다.
  • 첫번째 매개변수는 변환하고자 하는 대상이 될 문자열
  • 두번째 매개변수는 변환할 문자 값

2) replace(), replaceAll() 모두 반환값이 있는 함수다.

// 틀린 예
 if (sample.contains("zero")) {
            sample.replace("zero","0");
        } 
        
// 올바른 예
 if (sample.contains("zero")) {
            sample = sample.replace("zero", "0");       
        } 

3) String sample = ""; 이 아니라 String sample;로 선언하면 에러 발생한다.

  • 자바에서는 변수를 사용하기 전에 반드시 초기화해야 한다. 초기화하지 않은 변수를 사용하려고 하면 컴파일러가 에러를 발생시킨다.
profile
화려한 외면이 아닌 단단한 내면

0개의 댓글