Algorithm/Java

프로그래머스 - 숫자 문자열과 영단어 java :: 2021 카카오 채용연계형 인턴십

고고마코드 2022. 7. 8. 16:42
반응형
81301번

코딩테스트 연습 - 숫자 문자열과 영단어 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


풀이

📌각 숫자에 매칭되는 알파벳이 있다.

📌영단어의 위치는 랜덤이며 2번이상 연속으로 영단어가 나올 수도 있다.

 

📝풀이1

public int solution(String s) {
	List<String> alphabet = Arrays.asList( "zero","one","two","three","four","five","six","seven","eight","nine");
	
	StringBuilder answer = new StringBuilder();
	StringBuilder temp = new StringBuilder();
	for(char ch : s.toCharArray()) {			
		if(ch >= '0' && ch <= '9') { answer.append(ch); }
		else { temp.append(ch); }
		
		int num = alphabet.indexOf(temp.toString());
		if(num >= 0) {
			temp.setLength(0);
			answer.append(num);
		}
	}
	
    return Integer.parseInt(answer.toString());
}

🔨StringBuilder answer : 정답을 저장

🔨StringBuilder temp : 영단어를 조합하기 위한 조합용

 

🎈문자열에서 문자를 순회하며 0~9사이의 숫자인지, 영단어인지 확인합니다.

 

🎈만약 0~9사이의 숫자라면 바로 정답(answer)에 추가합니다.

만약 영단어라면 영단어를 조합하기 위해 조합용(temp)에 문자를 추가합니다.

 

🎈조합한 문자열이 미리 만들어둔 리스트 alphabet의 요소 중 일치하는 것이 있다면 

조합용(temp)를 비우고 정답(answer)에 추가합니다.

 

⚡테스트 케이스 처리속도: 0.10ms ~ 0.17ms


📝풀이2

public int solution(String s) {
	String[] numbers = { "0","1","2","3","4","5","6","7","8","9" };
	String[] alphabets = { "zero","one","two","three","four","five","six","seven","eight","nine" };
	for(int i=0; i<=9; i++) {
		s = s.replaceAll(alphabets[i], numbers[i]);
	}
	
	return Integer.parseInt(s);
}

🎈숫자와 영단어 모두 배열로 만들어 replaceAll 로 치환하는 방법입니다.

 

one => 1
two => 2

...

nine => 9

단, replaceAll 특성상 문자열 s의 모든 요소를 탐색하므로 처리 속도는 더 느려집니다.

 

⚡테스트 케이스 처리속도: 0.29ms ~ 0.94ms

반응형