프로그래머스 - 영어가 싫어요

남궁진 (jinvicky)·2026년 4월 10일

Problem


https://school.programmers.co.kr/learn/courses/30/lessons/120894

Solution


내 풀이대로 가려면 v 변수는 널을 대비하여 Integer로 가야 한다.
반복문을 뭘 쓸지 고민했으나 단순 for문으로 충분하다 생각하여 그리 했다.

과정의 순서를 틀려서 오답을 맛봤다.

  • 문자를 추가한다. (append)
  • 검사한다.
  • 행동한다 인데 검사와 추가를 반대 순서로 작성해서 항상 one에만 그치는 실패를 했다.

그리고 리턴타입이 long이라는 점도 꼼꼼이 봐야 한다.

Code


내가 맞춘 코드

import java.util.*;

class Solution {
    public long solution(String numbers) {
        // 찾을때까지 sb에 계속 더한다. map에서 null이 아닌 값이 나오면 결과 문자열에 append하고 마지막에 
        // 정수형으로 parse하여 리턴한다. 
        
        Map<String, Integer> map = new HashMap<>();
        map.put("zero", 0);
        map.put("one", 1);
        map.put("two", 2);
        map.put("three", 3);
        map.put("four", 4);
        map.put("five", 5);
        map.put("six", 6);
        map.put("seven", 7);
        map.put("eight", 8);
        map.put("nine", 9);
        
        StringBuilder sb = new StringBuilder();
        StringBuilder result = new StringBuilder();
        
        for(char c : numbers.toCharArray()) {
            sb.append(c);
            Integer v = map.get(sb.toString());
            
            if(v != null) {
                result.append(v);
                sb = new StringBuilder();
            }
        }
        
        return Long.parseLong(result.toString());
    }
}

더 간결한 코드

class Solution {
    public long solution(String numbers) {
        String[] words = {
            "zero","one","two","three","four",
            "five","six","seven","eight","nine"
        };
        
        for (int i = 0; i < 10; i++) {
            numbers = numbers.replaceAll(words[i], String.valueOf(i));
        }
        
        return Long.parseLong(numbers);
    }
}
profile
문제를 차근차근 하나씩 해결하려고 합니다:)

0개의 댓글