https://school.programmers.co.kr/learn/courses/30/lessons/81301
문제 설명
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
- 1478 → "one4seveneight"
- 234567 → "23four5six7"
- 10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.
숫자
숫자 | 영단어 |
0 | zero |
1 | one |
2 | two |
3 | three |
4 | four |
5 | five |
6 | six |
7 | seven |
8 | eight |
9 | nine |
제한사항
- 1 ≤ s의 길이 ≤ 50
- s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
- return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
입출력 예
s | result |
"one4seveneight" | 1478 |
"23four5six7" | 234567 |
"2three45sixseven" | 234567 |
"123" | 123 |
입출력 예 설명
입출력 예 #1
- 문제 예시와 같습니다.
입출력 예 #2
- 문제 예시와 같습니다.
입출력 예 #3
- "three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
- 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.
입출력 예 #4
- s에는 영단어로 바뀐 부분이 없습니다.
풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
import java.io.*;
import java.util.*;
class Solution {
static int tenth;
static String[] arr;
public int solution(String s) {
Stack<Integer> stack = new Stack<>();
int cnt = 0;
int answer =0;
for(int i=0; i<s.length(); i++) {
int check = s.charAt(i) - '0';
if(check >= 0 && check <= 9) {
stack.push(check);
} if (i == s.length()-1) {
break;
} else if (s.substring(i, i+2).equals("ze")){
stack.push(0);
i += 3;
} else if (s.substring(i, i+2).equals("on")){
stack.push(1);
i += 2;
} else if (s.substring(i, i+2).equals("tw")){
stack.push(2);
i += 2;
} else if (s.substring(i, i+2).equals("th")){
stack.push(3);
i += 4;
} else if (s.substring(i, i+2).equals("fo")){
stack.push(4);
i += 3;
} else if (s.substring(i, i+2).equals("fi")){
stack.push(5);
i += 3;
} else if (s.substring(i, i+2).equals("si")){
stack.push(6);
i += 2;
} else if (s.substring(i, i+2).equals("se")){
stack.push(7);
i += 4;
} else if (s.substring(i, i+2).equals("ei")){
stack.push(8);
i += 3;
} else if (s.substring(i, i+1).equals("ni")){
stack.push(9);
i += 2;
}
}
tenth = 1;
int size = stack.size();
for (int i=0; i<size;i++) {
answer += stack.pop() * tenth;
tenth *=10;
}
return answer;
}
}
|
cs |
나는 너무 어렵게 풀었었다...
훨씬 쉬운 답안을 찾았다.
1
2
3
4
5
6
7
8
9
10
11
|
class Solution {
public int solution(String s) {
String[] num= {"0","1","2","3","4","5","6","7","8","9"};
String[] word= {"zero" , "one" , "two" , "three" , "four" , "five" , "six" , "seven" , "eight" , "nine"};
for (int i = 0 ; i <10 ; i++){
s = s.replace(word[i] , num[i]);
}
return Integer.parseInt(s);
}
}
|
cs |
'코딩 문제 > 프로그래머스 [ Java ]' 카테고리의 다른 글
[ 프로그래머스 / Java ] 각도기 (0) | 2022.11.05 |
---|---|
[ 프로그래머스 / Java ] 특정 문자 제거하기 (0) | 2022.10.31 |
[ 프로그래머스 / Java ] 문자 반복 출력하기 (0) | 2022.10.30 |
[ 프로그래머스 / Java ] [ 2020 카카오 블라인드 채용 코딩테스트 ] 신고 결과 받기 (0) | 2022.03.10 |
[ 프로그래머스 / Java ] [ 2020 카카오 블라인드 채용 코딩테스트 ] 문자열 압축 (0) | 2022.03.09 |
댓글