🔗 문제 링크
📖 풀이 과정
- 문자열을 순회하며 해당하는 값이 있을 경우를 찾는 구현 문제입니다.
- 문제를 풀기 위해 가장 중요한 부분은 반복문의 인덱스 값을 잘 조절해야 하는 것입니다.
- 먼저 getNumber() 메소드를 통해 해당하는 문자열이 나온다면 숫자를 반환하도록 했습니다.
- 이중 for문을 구현하며 내부의 반복문은 외부의 반복문의 인덱스보다 +1 한 값을 기준으로 정했습니다.
- substring() 메소드를 주로 이용했기 때문에 문자열.length() 보다 작은 값까지 확인하면 마지막 문자를 확인하지 못합니다.
- 따라서, +1 한 값을 조건으로 추가합니다.
- 만약 숫자가 제대로 들어올 수도 있기 때문에 숫자가 들어온다면 그대로 답에 붙여줍니다.
- 문자열을 매개변수로 받으며 숫자일 경우에는 길이가 1개이기 때문에 해당하는 인덱스의 값을 char 형태로 바꾸고 if 조건문을 통해 판별하도록 했습니다.
- 정상적으로 값을 확인했다면 외부의 반복문의 인덱스는 내부의 인덱스 값부터 다시 확인해야 하므로 i = j 라는 코드를 추가했습니다.
💻 코드
public static int solution(String s) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i< s.length() - 1; i++){
for(int j = i + 1; j< s.length() + 1; j++){
char c = s.substring(i,j).charAt(0);
if(c >= '0' && c <= '9'){
sb.append(s,i,j);
i = j;
continue;
}
int tempNum = getNumber(s.substring(i,j));
if(getNumber(s.substring(i,j)) >= 0){
sb.append(tempNum);
i = j;
}
}
}
return Integer.parseInt(sb.toString());
}
private static int getNumber(String s){
int number = -1;
switch (s){
case "zero" :
number = 0;
break;
case "one" :
number = 1;
break;
case "two" :
number = 2;
break;
case "three" :
number = 3;
break;
case "four" :
number = 4;
break;
case "five" :
number = 5;
break;
case "six" :
number = 6;
break;
case "seven" :
number = 7;
break;
case "eight" :
number = 8;
break;
case "nine" :
number = 9;
break;
default:
break;
}
return number;
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 : 문자열 압축 (Java) (0) | 2022.02.18 |
---|---|
프로그래머스 : 단체사진 찍기 (Java) (0) | 2022.02.17 |
프로그래머스 : 신고 결과 받기 (Java) (0) | 2022.02.15 |
프로그래머스 : 신규 아이디 추천 (Java) (0) | 2022.02.13 |
프로그래머스 : 로또의 최고 순위와 최저 순위 (Java) (0) | 2022.02.12 |