영어와 숫자가 섞인 문자열을 정수형으로 출력하는 문제. 

문자열이 너무 어려워서 결국 어떤 방식으로 푸는지 찾아봤다.....

기억에 남는 방식은 2가지 인데, 

1. 문자열을 선언해서 숫자(문자)를 정수형으로 대체

2. 해시맵을 선언해서 키를 딕셔너리로 대체

 

이중 내가 선택한 방법은 1번...

정확히 말하자면, zero, one 처럼 문자로 써있는 숫자를 0, 1 처럼 숫자로 이뤄진 문자열로 바꾸고, 이 문자열을 다시 정수형으로 바꿔주는 것이다. 에휴

 

처음에 생각했던 방식은 옛날에 염기서열 문제 했던것 처럼 문자열에서 숫자 문자열(예: one)을 잘라내서 비교하고 바꾸는 거였는데, 자바에는 replace()라는 좋은 메소드가 있으므로 비효율적이라 생각해서 그냥 1번으로 하기로 했다. 

 

public int solution(String s){
	
    int answer = 0;
    String[] num = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; // 문자로된 숫자를 바꿔줄 숫자
    String[] word = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; // 바꿔야 할 문자열
    System.out.println(s); // 문자열 s 출력
    for(int i = 0; i < num.length; i++){ // num의 길이만큼 반복(0~9)
    	s = s.replace(word[i], num[i]); // s에 word[i]가 존재한다면 num[i]로 치환
    }
    answer = Integer.parseInt(s); // s를 정수형으로 변환
    
    return answer;
}

여기서 주의해서 볼 부분은 문자열을 치환해주는 replace()와 문자열을 정수형으로 바꿔주는 parseInt()....

 

둘다 문자열이네?? 자바의 정석 사서 봐야되나 고민중이다. 

다음에 풀때는 해시맵으로도 풀 수 있게 공부해봐야지...!

+ Recent posts