티스토리 뷰
프로그래머스 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());
}
}
결과
소스코드 깃허브 주소
'코딩테스트 > 알고리즘' 카테고리의 다른 글
[알고리즘]프로그래머스 68644번 - 두 개 뽑아서 더하기 (0) | 2022.01.01 |
---|---|
[알고리즘]프로그래머스 12937번 - 짝수와 홀수 (0) | 2022.01.01 |
[알고리즘]프로그래머스 12918번 - 문자열 다루기 기본 (0) | 2022.01.01 |
[알고리즘]프로그래머스 42748번 - K번째수 (0) | 2021.12.31 |
[알고리즘]프로그래머스 42626번 - 더 맵게 (0) | 2021.12.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코드 스니펫
- JPA
- 우선순위큐
- k8s
- 비트연산
- dfs
- 카카오
- Java
- kotlin
- 쓰레드
- 코딩인터뷰
- sql
- 프로그래머스
- 회고
- 문자열
- BFS
- dsu
- Uber
- 연결리스트
- 스트림
- 구현
- 스택
- 탐욕법
- 알고리즘
- TDD
- 오늘의집
- set
- dp
- 정렬
- 해쉬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함