티스토리 뷰

프로그래머스 81301번 - 숫자 문자열과 영단어

프로그래머스 81301번 - https://programmers.co.kr/learn/courses/30/lessons/81301
프로그래머스 81301번 - https://programmers.co.kr/learn/courses/30/lessons/81301

요구사항

1. 숫자 중 일부 자릿수가 영단어로 바뀌어져 있는 것을 원래 숫자로 변경한다.

요구사항 분석 및  풀이과정

1. 문자열 s를 순회하면서 영단어('a' ~ 'z', 'A' ~ 'Z')인지 확인한 후 영단어일 경우 어떤 숫자의 영단어인지 파악.

2. 각 숫자의 영단어는 앞 2개의 문자로 유일하게 정해진다. 따라서 숫자의 영단어를 파악할 때 2 단어를 기준으로 구분한다.

3. 2단어로 기준으로 영단어를 파악한 후, 숫자로 변환 후 해당 숫자의 영단어의 길이 정보를 이용하여 점프하여 마저 순회한다.

 

각 숫자의 영단어를 구분하여주는 앞 2개의 문자를 해쉬 맵의 키로, 해당 영단어에 대한 길이 정보 등을 담은 객체 Word를 값으로 미리 생성하여 사용한다.

소스코드 작성

import java.util.HashMap;
import java.util.Map;

class Solution {

    private static class Word {

        private final String body;
        private final int value;

        public Word(String body, int value) {
            this.body = body;
            this.value = value;
        }

        public int getLength() {
            return this.body.length();
        }

        public int getValue() {
            return this.value;
        }
    }

    public Map<String, Word> getLens() {
        Map<String, Word> lens = new HashMap<>();
        lens.put("ze", new Word("zero", 0));
        lens.put("on", new Word("one", 1));
        lens.put("tw", new Word("two", 2));
        lens.put("th", new Word("three", 3));
        lens.put("fo", new Word("four", 4));
        lens.put("fi", new Word("five", 5));
        lens.put("si", new Word("six", 6));
        lens.put("se", new Word("seven", 7));
        lens.put("ei", new Word("eight", 8));
        lens.put("ni", new Word("nine", 9));
        return lens;
    }

    public int solution(String s) {
        int answer = 0;

        StringBuilder sb = new StringBuilder(100);
        Map<String, Word> lens = getLens();

        int start = 0;

        while (start < s.length()) {
            char v = s.charAt(start);
            if (Character.isDigit(v)) {
                sb.append(v);
                start++;
            } else if (Character.isLetter(s.charAt(start)) && (start + 1) < s.length()) {
                Word word = lens.get(s.substring(start, start + 2));
                sb.append(word.getValue());
                start += word.getLength();
            }
        }

        return Integer.parseInt(sb.toString());
    }
}

 

 

결과

소스코드 깃허브 주소

링크

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함