[코딩테스트] 프로그래머스 - 숫자 문자열과 영단어(JAVA)
문제 설명
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
1478 → “one4seveneight”
234567 → “23four5six7”
10203 → “1zerotwozero3”
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ s의 길이 ≤ 50
- s가 “zero” 또는 “0”으로 시작하는 경우는 주어지지 않습니다.
- return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
풀이
- 프로그래머스 level 1단계 문제
- 정통적인 for loop를 이용하는게 정신건강 상 좋습니다..
- 뭔가 아쉽긴 한 문제…
public int solution(String s){
/**
* 미리 숫자 & 영단어를 array로 선언하도록 합니다.
*/
String[] strArray = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
"nine"};
String[] numArray = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
/**
* strArray for loop를 돌면서 s.replaceAll 메서드 실행
*/
for (int i = 0; i < strArray.length; i++) {
s = s.replace(strArray[i], numArray[i]);
}
/**
* String -> Integer 변환
*/
return Integer.parseInt(s);
}
검증 및 보강 — 2026-10-24
숫자 영단어는 정규식이 아닌 고정 문자열이므로 replaceAll 대신 replace로 충분합니다. 원문 코드에 빠져 있던 메서드 닫는 중괄호도 보완했습니다. one4seveneight → 1478, 23four5six7 → 234567, 123 → 123을 확인하세요. 치환 대상은 10개로 고정되어 있어 시간은 입력 길이에 선형이고, 각 치환은 새 문자열을 만들 수 있습니다.
메서드 예제는 Solution 클래스 내부에 넣는 형태이며, 사용한 클래스는 추가 import 없이 java.lang의 기본 클래스입니다. 필요한 import를 클래스 선언 위에 추가하세요.
댓글