숫자 문자열과 영단어

김나영·2023년 6월 19일
0

프로그래머스

목록 보기
17/39

문제 : 숫자 문자열과 영단어

풀이

HashMap<String, String> map = new LinkedHashMap<String, String>();
  • HashMap을 사용

  • 입력된 key의 순서가 보장되어야하므로 LinkedHashMap 사용

    • HashMap은 key의 순서가 지켜지지 않음
  • key와 value 값을 String으로 받음

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");
  • HashMap의 변수인 map에 데이터를 넣기 위해 put() 사용

  • 영단어는 key, 숫자는 value로 초기화

for(String key : map.keySet()){
   if(s.contains(key)){
     s = s.replace(key, map.get(key));
   }
}
  • String 변수 key 선언

  • 전체 key값들의 길이만큼 반복으로 실행

  • 이때, 만약 String 배열에서 key가 있으면

  • replace() 함수를 사용하여 문자열에 존재하는 영단어를 map이 가지고 있는 숫자 문자열로 치환하여 String 배열의 변수 s에 저장

int answer = Integer.parseInt(s);
return answer;
  • 숫자로만 이루어진 문자열을 Integer.parseInt()를 사용하여 정수로 변경 후 return

전체 코드

import java.util.HashMap;
import java.util.LinkedHashMap;
class Solution {
        public int solution(String s) {
            HashMap<String, String> map = new LinkedHashMap<String, String>();
            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");
            for(String key : map.keySet()){
                if(s.contains(key)){
                    s = s.replace(key, map.get(key));
                }
            }
            int answer = Integer.parseInt(s);
            return answer;
        }
    }

또 다른 풀이

    class Solution {
        public int solution(String s) {
            String[] num = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
            for (int i = 0; i < 10; i++) {
                s = s.replace(num[i], Integer.toString(i));
            }
            int answer = Integer.parseInt(s);
            return answer;
        }
    }
  • 일치하는 문자가 있는지 비교를 위해 String으로 num 배열을 만들어줌

  • 숫자가 0~9까지 10개로 정해져있으므로 for문은 for(int i=0; i<10; i++) 로 만듦

  • replace()를 활용해 문자열로 치환하여 String 타입의 변수 s에 저장

  • Integer.parseInt()를 사용하여 String 타입을 int 타입으로 변환 후 answer에 저장 후 return

0개의 댓글