728x90
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/81301
📌 문제 개요
숫자의 일부 또는 전체가 영단어로 표현된 문자열이 주어진다.
문자열에 포함된 영단어를 숫자로 변환하여 원래 숫자를 반환
one4seveneight
// 1478
📌 접근 방법
숫자와 영단어는 다음과 같이 1:1로 대응
| 숫자 | 영단어 |
| 0 | zero |
| 1 | one |
| 2 | two |
| 3 | three |
| 4 | four |
| 5 | five |
| 6 | six |
| 7 | seven |
| 8 | eight |
| 9 | nine |
영단어를 배열에 저장한 후 반복문을 돌면서 숫자로 치환
String[] words = {
"zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine"
};
📌 핵심 아이디어
배열의 인덱스를 숫자로 활용
for (int i = 0; i < words.length; i++) {
s = s.replace(words[i], String.valueOf(i));
}
예를 들어
s = "one4seveneight";
one4seveneight
↓
14seveneight
↓
147eight
↓
1478
📌 핵심 코드
s = s.replace(words[i], String.valueOf(i));
words[i] : 현재 치환할 영단어 입니다.
i = 1
words[i]
"one"
String.valueOf(i) : 정수를 문자열로 변환합니다.
String.valueOf(1)
"1"
↓
i = 1
↓
s = s.replace("one", "1");
↓
"one4seveneight"
↓
"14seveneight"
"14seveneight"
📌 왜 다시 s에 저장해야 할까?
문자열(String)은 불변(Immutable) 객체 만 호출하면 원본 문자열은 변경되지 않습니다.
s.replace("one", "1");
그래서 반드시 처럼 반환된 새로운 문자열을 다시 저장해야 합니다.
s = s.replace("one", "1");
반복문 전체 동작 실제로는 다음 코드가 순서대로 실행
for (int i = 0; i < words.length; i++) {
s = s.replace(words[i], String.valueOf(i));
}
s = s.replace("zero", "0");
s = s.replace("one", "1");
s = s.replace("two", "2");
s = s.replace("three", "3");
s = s.replace("four", "4");
s = s.replace("five", "5");
s = s.replace("six", "6");
s = s.replace("seven", "7");
s = s.replace("eight", "8");
s = s.replace("nine", "9");
📌 전체 코드
class Solution {
public int solution(String s) {
String[] words = {
"zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine"
};
for (int i = 0; i < words.length; i++) {
s = s.replace(words[i], String.valueOf(i));
}
return Integer.parseInt(s);
}
}
📄 정리
- 숫자와 영단어의 대응 관계를 배열로 저장
- replace()를 활용하여 영단어를 숫자로 변환
- String.valueOf()로 숫자를 문자열로 변경
- 문자열은 불변 객체이므로 치환 결과를 다시 저장해야 함
- 모든 영단어를 숫자로 바꾼 후 Integer.parseInt()로 정수 변환
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| 프로그래머스 콜라 JAVA 풀이 (구현, 시뮬레이션) (0) | 2026.06.04 |
|---|---|
| 카드 뭉치 JAVA 풀이 (구현, 문자열) (0) | 2026.06.03 |
| [프로그래머스] K번째수 JAVA 풀이 (알고리즘, 시간복잡도) (0) | 2026.05.28 |
| 프로그래머스 푸드 파이트 대회 JAVA 풀이 (0) | 2026.05.27 |
| 프로그래머스 두 개 뽑아서 더하기 (JAVA) (0) | 2026.05.26 |