문제
https://school.programmers.co.kr/learn/courses/30/lessons/81301
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
하나의 문자열이 주어지면 그 안에서 영단어를 찾아 숫자로 파싱하여 반환해야 한다.
풀이
반환 값이 1 ~ 2,000,000,000의 정수로 매우 커 StringBuilder를 사용하여 반환값을 만들어줬다.
단순하게 문자열을 순회하면서, 숫자를 만나면 append, 숫자가 아닌 값은 switch 문에서 해당 영단어의 1~2번째 문자를 비교하며 숫자로 변환하여 append한다.
문자가 숫자인지 확인하는 메서드는 Character.isDigit(char)이다.
떠오르지 않아서 공식 문서를 확인해서 찾았는데, 유용한 메서드니 잘 기억해두자.
class Solution {
public int solution(String s) {
StringBuilder sb = new StringBuilder();
int i = 0;
while (true) {
if (i >= s.length()) break;
char current = s.charAt(i);
// 현재 문자가 숫자라면 그대로 문자열에 추가
if (Character.isDigit(current)) {
sb.append(String.valueOf(current));
i++;
continue;
}
switch (current) {
case 'z':
sb.append("0");
i += 4;
break;
case 'o':
sb.append("1");
i += 3;
break;
case 't':
if (s.substring(i, i+2).equals("tw")) {
sb.append("2");
i += 3;
} else if (s.substring(i, i+2).equals("th")) {
sb.append("3");
i += 5;
}
break;
case 'f':
if (s.substring(i, i+2).equals("fo")) {
sb.append("4");
i += 4;
} else if (s.substring(i, i+2).equals("fi")) {
sb.append("5");
i += 4;
}
break;
case 's':
if (s.substring(i, i+2).equals("si")) {
sb.append("6");
i += 3;
break;
} else if (s.substring(i, i+2).equals("se")) {
sb.append("7");
i += 5;
}
break;
case 'e':
sb.append("8");
i += 5;
break;
case 'n':
sb.append("9");
i += 4;
break;
}
}
return Integer.parseInt(sb.toString());
}
}
다른 사람의 풀이를 보니, 대응되는 영단어 표를 배열로 선언해 for문 안에서 입력 문자열을 replaceAll 메서드를 10번 적용해 0~9까지 모든 영단어를 숫자로 변환하는 코드가 있었다.
내가 떠올린 코드와 다르게 굉장히 직관적인 코드라는 생각이 들었다..
'Problem Solving > 프로그래머스' 카테고리의 다른 글
| [프로그래머스/Java] N진수 게임 (feat. Java 진법 변환) (1) | 2025.05.23 |
|---|---|
| [프로그래머스/Java] 뉴스 클러스터링 (1) | 2025.05.22 |
| [프로그래머스/Java] 튜플 (0) | 2025.05.19 |
| [프로그래머스/Java] 캐시 (0) | 2025.05.19 |
| [프로그래머스/Java] 비밀지도 (0) | 2025.05.14 |
