본문 바로가기

Java/프로그래머스

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

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

 

Character.isDigit() 

- char형 문자하나가 숫자인지 아닌지 검사하고 boolean 형값을 반환

- 숫자면 true, 그외에는 false

 

Character.isAlphabetic()

- char형 문자가 알파벳인지 판단 

 

Character.isLetter()

- char형 문자가 문자인지 판단

 

Character.isSpace()

- char형 문자가 공백문자인지 판단 

 

 

 

정답 

 

- 현재 문자가 숫자라면 결과 그냥 더하기

- 숫자가 아니라면 숫자를 나타내는 단어의 일부일 수 있음

- 현재 문자를 임시 StringBuilder 'temp'에 추가 하며 임시 단어를 생성

-임시단어 temp가 map의 키라면 해당되는 value값을 결과에 더하기 

 

 

import java.util.*;

class Solution {
    public int solution(String s) {
        
        HashMap<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 answer = new StringBuilder();
        //문자가 숫자 단어에 해당되는 지 확인 하기 위한 임시 StringBuilder
        StringBuilder temp = new StringBuilder(); 
        

        for(int i=0; i<s.length(); i++)
        {
            char cur = s.charAt(i);
            
            if(Character.isDigit(cur))
            {
                answer.append(cur);
            }
            //숫자가 아니라면, 숫자를 나타내는 단어의 일부인지 판단 
            else
            {
                //현재 문자를 임시 temp에 저장 
                temp.append(cur);
                
                if(map.containsKey(temp.toString()))
                {
                    answer.append(map.get(temp.toString()));
                    temp.setLength(0); //temp 초기화 
                }
            }
        }
        
        return Integer.parseInt(answer.toString());
    }
}

 

 

 

다른 사람의 풀이 

 

1)

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);
    }
}

 

 

2)

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        StringBuilder sb = new StringBuilder("");
        int len = s.length();
        String[] digits = {"0","1","2","3","4","5","6","7","8","9"};
        String[] alphabets = {"zero","one","two","three","four","five","six","seven","eight","nine"};

        for(int i=0; i<10; i++){
            s = s.replaceAll(alphabets[i],digits[i]);
        }

        return Integer.parseInt(s);
    }
}