[프로그래머스] 숫자 문자열과 영단어

이한솔·2023년 10월 4일
0

프로그래머스_레벨1

목록 보기
29/65
post-thumbnail

✨️ 문제 설명

: 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

  • 1478 → "one4seveneight"
  • 234567 → "23four5six7"
  • 10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ s의 길이 ≤ 50
  • s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
  • return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.

🎲 자바 풀이

 import java.util.*;
class Solution {
    public int solution(String s) {
        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 temp = new StringBuilder();
        for(char ch : s.toCharArray()){
            if(Character.isDigit(ch)){
                sb.append(ch);
            }else{
                temp.append(ch);
                if(map.containsKey(temp.toString())){
                    sb.append(map.get(temp.toString()));
                    temp.setLength(0);
                }
                
            }
        }
        
        return Integer.parseInt(sb.toString());
    }
}

풀이 설명

: map을 이용하여 풀이했다. 변환해야하는 영단어와 숫자를 map에 넣어두고, 주어진 문자열을 문자 배열로 변환하였다.
: 문자열이 map에 있을 경우 변환해야하므로 StringBuilder 객체를 하나 더 선언하고, 각 문자를 더해 문자열이 map에 있을 경우 숫자로 변환한다. 그 후 다시 StringBuilder 객체를 초기화하였다.

다른 사람 풀이

 class Solution {
    public int solution(String s) {
        String[] strArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        for(int i = 0; i < strArr.length; i++) {
            s = s.replaceAll(strArr[i], Integer.toString(i));
        }
        return Integer.parseInt(s);
    }
}

: 복잡하게 map을 사용하지 않아도 되서 좋았다고 생각한다.

profile
개인 공부용

0개의 댓글