숫자 문자열과 영단어
2021 카카오 채용연계형 인턴십 LEVEL 1 문제
'one2three4fivesix' 라는 문구가 주어지면 '123456' 이라는 값을 return하면 된다. 규칙은 간단하다. 즉, 숫자는 숫자 그대로를 출력하고, 문자는 숫자로 변환시켜 출력하면 되는 것이다.
문제를 해결하기 위해 StringBuilder를 하나 선언하여 이후에 한 번에 출력하기 전까지 차곡차곡 쌓을 것이다.
또한, for구문을 통해서 주어진 문자열에 대해 charAt으로 접근하고 알파벳마다의 첫 문자를 기준으로 어떤 문자열인지 알아내는 구조로 진행할 예정이다.
숫자영단어
0 | zero |
1 | one |
2 | two |
3 | three |
4 | four |
5 | five |
6 | six |
7 | seven |
8 | eight |
9 | nine |
경우의 수는 9가지 인데 여기서도 세분화시키자면
z일 경우 zero
o일 경우 one
t일 경우 두 번째 문자를 비교하여 two, three 구분
f일 경우 두 번째 문자를 비교하여 four, five 구분
s일 경우 두 번째 문자를 비교하여 six, seven구분
e일 경우 eight
n일 경우 nine
이와 같이 if구문을 통해 천천히 비교해주고, 만약 숫자가 들어올 시에 바로 StringBuilder에 넣어주었다.
구조 설명 필요없이 바로 문제 해법을 보자.
문제 해법
class Solution {
public int solution(String s) {
int answer = 0;
StringBuilder sb = new StringBuilder();
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(c == 'z') {
i += 3;
sb.append(0);
}
else if(c == 'o') {
sb.append(1);
i += 2;
} else if(c == 't') {
if(s.charAt(i + 1) == 'w') {
sb.append(2);
i += 2;
} else {
sb.append(3);
i += 4;
}
} else if(c == 'f') {
if(s.charAt(i + 1) == 'o') {
sb.append(4);
i += 3;
} else {
sb.append(5);
i += 3;
}
} else if(c == 's') {
if(s.charAt(i + 1) == 'i') {
sb.append(6);
i += 2;
} else {
sb.append(7);
i += 4;
}
} else if(c == 'e') {
sb.append(8);
i += 4;
} else if(c == 'n') {
sb.append(9);
i += 3;
} else {
sb.append(c);
}
}
answer = Integer.parseInt(sb.toString());
return answer;
}
}
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/JAVA] H-Index - 정렬 (1) | 2022.02.07 |
---|---|
[프로그래머스/JAVA] 로또의 최고 순위와 최저 순위 - 2021 Dev-Matching: 웹 백엔드 개발자(상반기) (0) | 2022.02.07 |
[프로그래머스/JAVA] 오픈채팅방 - 2019 KAKAO BLIND RECRUITMENT (0) | 2022.01.30 |
[프로그래머스/JAVA] 실패율 - 2019 KAKAO BLIND RECRUITMENT (2) | 2022.01.28 |
[프로그래머스/JAVA] 가장 먼 노드(DFS/BFS) (1) | 2022.01.22 |