문제: https://school.programmers.co.kr/learn/courses/30/lessons/81301
1. 코드
class Solution {
public int solution(String s) {
String[] number = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
String temp = "";
while(!s.isBlank()) {
if(s.matches("^[0-9](.*)")) {
temp += s.charAt(0);
s = s.substring(1);
}
else {
for(int i = 0; i < number.length; i++) {
if(s.indexOf(number[i]) == 0) {
temp += i + "";
s = s.substring(number[i].length());
break;
}
}
}
}
return Integer.parseInt(temp);
}
}
2. 설명
String[] number = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
String temp = "";
먼저 숫자에 대응되는 영단어를 배열로 만들어줍니다.
while(!s.isBlank()) {
if(s.matches("^[0-9](.*)")) {
temp += s.charAt(0);
s = s.substring(1);
}
문자열이 공백이 될 때까지 반복하는데 정규식을 이용하여 문자열의 시작이 숫자로 시작되는지 확인한 뒤 만약 숫자로 시작되는 문자열이라면 해당 문자를 temp에 추가하고 문자열의 길이를 1만큼 줄여 저장합니다.
else {
for(int i = 0; i < number.length; i++) {
if(s.indexOf(number[i]) == 0) {
temp += i + "";
s = s.substring(number[i].length());
break;
}
}
}
}
문자열이 숫자로 시작되지 않으면 어떠한 영단어로 시작하는지 확인한 뒤 시작되는 영단어에 대한 숫자를 문자열로 temp에 추가한 뒤 영단어에 해당하는 부분을 제거하여 s에 저장합니다.
return Integer.parseInt(temp);
문자열 s가 공백이 되면 문자열 temp에 저장된 값을 10진수 정수형으로 변환하면 문제는 해결됩니다.
3. 정리
- 숫자에 대응되는 문자열을 배열을 통해서 저장한다.
- 정규식을 통해서 문자열 s의 시작부분이 숫자인지 문자인지 확인한다.
- 만약 숫자로 시작된다면 해당 숫자를 임의의 String 변수에 저장하고 문자열 s의 첫번째 요소를 제거한다.
- 만약 영단어로 시작된다면 어느 문자열로 시작되는지 확인한 뒤 해당 문자열을 임의의 String 변수에 저장한 뒤 해당 문자열을 문자열 s에서 제거한다.
- (추가) 다른 사람들은 replaceAll()메서드를 활용하여 쉽게 해결하였다.
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 134240번: 푸드 파이트 대회 [Java] (0) | 2023.07.19 |
---|---|
프로그래머스 - 68644번: 두 개 뽑아서 더하기 [Java] (0) | 2023.07.18 |
프로그래머스 - 12915번: 문자열 내 마음대로 정렬하기 [Java] (0) | 2023.07.17 |
프로그래머스 - 17681번: [1차] 비밀지도 [Java] (0) | 2023.07.15 |
프로그래머스 - 12981번: 영어 끝말잇기 [Java] (0) | 2023.07.14 |