Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 코테
- Class
- Data Structure
- 코딩테스트
- Tree
- SQL
- Counting
- implement
- Math
- string
- 파이썬
- 자바
- Matrix
- simulation
- geometry
- array
- 구현
- dynamic programming
- Stack
- Binary Search
- Method
- greedy
- two pointers
- Number Theory
- bit manipulation
- java
- database
- sorting
- hash table
- Binary Tree
Archives
- Today
- Total
코린이의 소소한 공부노트
[프로그래머스/Lv.1] 숫자 문자열과 영단어 본문
1. Input
1) 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s
2. Output
1) s가 의미하는 원래 숫자
3. Constraint
1) 1 ≤ s의 길이 ≤ 50
2) s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않는다.
3) 반환 값이 int 범위에 맞는 정수가 되는 올바른 입력만 s로 주어진다.
4) 각 숫자에 대응하는 영단어는 다음같이 나온다.
0 zero 1 one 2 two 3 three 4 four 5 five 6 six 7 seven 8 eight 9 nine
4. Example
Input: s="one4seveneight" -> Output: 1478
5. Code
1) 첫 코드(2022/??)
String rest = s;
String answer = "";
char test = rest.charAt(0);
while(rest.length()>0) {
test = rest.charAt(0);
switch(test) {
case 'z':
answer += "0";
rest = rest.substring(4);
break;
case 'o':
answer += "1";
rest = rest.substring(3);
break;
case 't': // two, three
if(rest.charAt(1) == 'w') {
answer += "2"; rest = rest.substring(3);
}
else {
answer += "3"; rest = rest.substring(5);
}
break;
case 'f': // four, five
if(rest.charAt(1) == 'o') answer += "4";
else answer += "5";
rest = rest.substring(4);
break;
case 's': // six, seven
if(rest.charAt(1) == 'i') {
answer += "6"; rest = rest.substring(3);
}
else {
answer += "7"; rest = rest.substring(5);
}
break;
case 'e':
answer += "8";
rest = rest.substring(5);
break;
case 'n':
answer += "9";
rest = rest.substring(4);
break;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
answer += test;
rest = rest.substring(1);
break;
} // switch
} // while
return Integer.parseInt(answer);
2) 훨씬 간단해지고 빨라진 코드(2022/11/14)
String num = "";
for(int i=0 ; i<s.length() ; i++){
char c = s.charAt(i);
switch(c){
case 'z': // zero
num += String.valueOf(0); i+=3; break;
case 'o': // one
num += String.valueOf(1); i+=2; break;
case 't': // two, three
if(String.valueOf(s.charAt(i+1)).equals("w"))
{ num += String.valueOf(2); i+=2;}
else
{ num += String.valueOf(3); i+=4;}
break;
case 'f': // four, five
if(String.valueOf(s.charAt(i+1)).equals("o"))
num += String.valueOf(4);
else
num += String.valueOf(5);
i+=3; break;
case 's': // six, seven
if(String.valueOf(s.charAt(i+1)).equals("i"))
{ num += String.valueOf(6); i+=2;}
else
{ num += String.valueOf(7); i+=4;}
break;
case 'e': // eight
num += String.valueOf(8); i+=4; break;
case 'n': // nine
num += String.valueOf(9); i+=3; break;
default: // digit
num += String.valueOf(c);
} // switch
} // for
return Integer.valueOf(num);
'코딩테스트 풀이 > JAVA' 카테고리의 다른 글
[프로그래머스/Lv.1] 로또의 최고 순위와 최저 순위 (0) | 2022.11.15 |
---|---|
[프로그래머스/Lv.1] 악수의 개수와 덧셈 (0) | 2022.11.14 |
[프로그래머스/Lv.1] 부족한 금액 계산하기 (0) | 2022.11.11 |
[프로그래머스/Lv.1] 없는 숫자 더하기 (0) | 2022.11.11 |
[프로그래머스/Lv.1] 최소직사각형 (0) | 2022.11.09 |