본문 바로가기

알고리즘/프로그래머스

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

문제 내용

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

 

코딩테스트 연습 - 숫자 문자열과 영단어

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

programmers.co.kr

 


문제 접근 방법

난이도가 LV1이라 그런지 쉽게 풀린 문제다.

 

생각한 방법은.

zero~nine까지 String 배열을 만들고

HashMap에 ket엔 영단어, value엔 숫자(문자)를 각각 맞게 넣어준다. ex) (zero, 0) (one, 1) ....

 

작업이 완료되면 s 문자열의 문자를 앞에서부터 하나씩 검사해서

빈 문자열(result)에 key값이 만들어지면 key에 해당하는 value를 붙여주고

 

만약 s문자열에서 문자가 숫자로 나온다면 값이 value에 있는지 검사 후에 

result에 바로 숫자를 붙여주면된다.

 


 

풀이

public static int solution(String s) {
		int ans=0;
		HashMap<String, String> numsMap = new HashMap<String, String>();
		String[] alpha = {"zero","one","two","three","four","five","six","seven","eight","nine"};
		String numStr = "";
		String result = "";
		
		for(int i=0; i<10; i++) {
			String nums = Integer.toString(i);
			numsMap.put(alpha[i], nums);
		}
		
		for(int i=0; i<s.length(); i++) {
			numStr += String.valueOf(s.charAt(i));
			if(numsMap.containsKey(numStr)) {
				result += numsMap.get(numStr);
				numStr = "";
			}else if(numsMap.containsValue(numStr)) {
				result += numStr;
				numStr = "";
			}
		}
		ans = Integer.parseInt(result);
		
		return ans;
	}

 


마치며 

레벨1 문제라서 그런지 수월하게 풀린 문제이다. 레벨2도 수월하게 풀고싶은데 ㅠ