2021. 10. 26. 10:50ㆍ알고리즘
문자열 s = 숫자 + 영단어 one two three .. ~nine 으로 이루어진 문자열
solution 함수를 통해서 전부 숫자로 바꿔서 출력하면됨 의미하는 원래숫자 = int 형
my 풀이
package prt1;
public class MainEntry {
public static void main(String[] args) {
System.out.println("hello world");
solution("123");
System.out.println(solution("23four5six7"));
}
public static int solution(String s) {
char[] str = s.toCharArray();
int answer = 0;
for(int i = 0 ; i < str.length; i++) {
if(10 <= Character.getNumericValue(str[i]) && Character.getNumericValue(str[i]) <= 35){
if(Character.getNumericValue(str[i]) == 35) {
answer *= 10;
i += 3;
}
else if(Character.getNumericValue(str[i]) == 24) {
answer *= 10;
answer += 1;
i += 2;
}
else if(Character.getNumericValue(str[i]) == 29 && Character.getNumericValue(str[i+1]) == 32) {
answer *= 10;
answer += 2;
i += 2;
}
else if(Character.getNumericValue(str[i]) == 29 && Character.getNumericValue(str[i+1]) == 17) {
answer *= 10;
answer += 3;
i += 4;
}
else if(Character.getNumericValue(str[i]) == 15 && Character.getNumericValue(str[i+1]) == 24) {
answer *= 10;
answer += 4;
i += 3;
}
else if(Character.getNumericValue(str[i]) == 15 && Character.getNumericValue(str[i+1]) == 18) {
answer *= 10;
answer += 5;
i += 3;
}
else if(Character.getNumericValue(str[i]) == 28 && Character.getNumericValue(str[i+1]) == 18) {
answer *= 10;
answer += 6;
i += 2;
}
else if(Character.getNumericValue(str[i]) == 28 && Character.getNumericValue(str[i+1]) == 14) {
answer *= 10;
answer += 7;
i += 4;
}
else if(Character.getNumericValue(str[i]) == 14) {
answer *= 10;
answer += 8;
i += 4;
}
else if(Character.getNumericValue(str[i]) == 23) {
answer *= 10;
answer += 9;
i += 3;
}
}else {
answer *= 10;
answer += Character.getNumericValue(str[i]);
}
}
return answer;
}
}
기본적으로 문자열을 한글자 한글자씩 검사를 해야하니깐 배열로 만들 생각을 했던거 같음
여기서 문자열 = > char 배열
char[] arr = str.toCharArray(); 해서 간단하게 만들어주고
mainentry 에서 계속 실행해보면서 진행함
그리고 Character.getNumericValue(arr[i]) 를 사용 문자배열의 요소요소의 값을 인수화 해서 조건에 대입
'1' 문자 = 값 1
'9' 문자 = 값 9
Character.getNumericValue('a') 의 값은 10
Character.getNumericValue('z') 의 값은 35
근데 이렇게 하면 대소문자 구분은 안됨 'A' = 10임
그냥 Character.getNumericValue 이거 쓰지말고 'a' <= arr[i] <='z' 이렇게 써서 아스키코드값으로 비교 해버리면 간단함.
그리고 for문 돌리면서 if 조건 주면서 각 영단어에 해당하는 case를 만들어서 처리함
이게 내가 푼 풀이 그리고 쫌 신박하게 보이는 풀이
class Solution {
public int solution(String s) {
String[] strArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for(int i = 0; i < strArr.length; i++) {
s = s.replaceAll(strArr[i], Integer.toString(i));
}
return Integer.parseInt(s);
}
}
문자열을 자식으로 가지는 strArr 문자열 배열을 만든다. 각 영단어에대해 적고
매개변수로 받은 s 에 replaceAll사용해서 zero = 0 one = 1 ~ 반복문 돌려서 넣어주고
마지막으로 string 인 s 를 Interger.parseInt 사용해서 int 형으로 변환해서 리턴값을 준다.
Interger.toString int 를 문자열로
서로 반대의 관계
Integer.parseInt() 문자열을 int로