시작하기, 뭐든

코딩테스트 뿌시기 2 - 2021 카카오 채용연계형 인턴십 숫자 문자열과 영단어 풀이 본문

코딩테스트

코딩테스트 뿌시기 2 - 2021 카카오 채용연계형 인턴십 숫자 문자열과 영단어 풀이

Gascon 2022. 1. 5. 22:46

시작하기, 뭐든 - 기록 17일차

오늘 풀어본 문제는 2021 카카오 채용연계형 인턴십 숫자 문자열과 영단어 문제였다.

어제 풀었던 신규 아이디 추천과 같은 레벨1 이었는데, 레벨1도 차이가 심한가보다 싶은 문제였다.

 

생각보다 빠르게 문제를 풀 수 있었는데, 다른 사람의 풀이를 보니...!

진짜 매력적인 코드를 짜는 사람이 이렇게나 많구나 싶었다. 그래서 오늘도 후다닥 포스팅을 쓰러 왔다!

 

문제는 매우 간단했다.

영어숫자 문자열과 영단어로된 부분을 숫자로 바꾸면 끝!

제시어 출력값
"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

 

일단 초등학생도 한번에 알아볼 수 있는...매우 단순한 나의 코드를 보자.

class Solution {
    public int solution(String s) {
	 int answer = 0;
     
     	s= s.replace("zero", "0");
     	s= s.replace("one", "1");
     	s= s.replace("two", "2");
     	s= s.replace("three", "3");
     	s= s.replace("four", "4");
     	s= s.replace("five", "5");
     	s= s.replace("six", "6");
     	s= s.replace("seven", "7");
     	s= s.replace("eight", "8");
     	s= s.replace("nine", "9");
     
     	answer = Integer.parseInt(s);
    	return answer;
    }
}

솔직히 어제 너무 맘에 들었던 replaceAll()에서 빠져나오지 못해서 그런가..... 죄다 replace를 시켜버렸다.

한마디로 노가다.

물론, 결과는 똑같다.

 

replace하려는 문자가 있으면 바꾸고 없으면 안바꿀테니 원하는 값을 얻을 수 있다.

하지만!

정말정말정말 비교도 안될 정도로 깔끔하고 매력적인 풀이를 찾았다!

class Solution {
    public int solution(String s) {
        int answer = 0;
        String[] char_number =  {"zero","one","two","three","four","five","six","seven","eight","nine"};
        
        for(int i=0; i<char_number.length; i++) {
        	s=s.replace(char_number[i], Integer.toString(i));
        }
        
        answer = Integer.parseInt(s);
        return answer;
    }
}

replace 시킬 단어들을 String 배열에 만들어두고 for문을 돌려서 하나씩 찾아서 바꾸는데..!

너무 마음에 들었던건 바꾸는 숫자도 for에 쓰이는 숫자를 쓴것!

 

바로 따라서 풀어봤다.

역시 단순한 문제도 최적화에 따라서 레벨이 또 나뉘는거 같다.

단순한 문제였을지라도, 코드를 어떻게 짜야하는지 배울 수 있는 시간이였다.

 

역시 뭐든! 시작하면 더 나은 내일이 있다!

 

끝!

Comments