반응형
81301번
코딩테스트 연습 - 숫자 문자열과 영단어 | 프로그래머스 스쿨 (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
반응형
'Algorithm > Java' 카테고리의 다른 글
프로그래머스 - 로또의 최고 순위와 최저 순위 java :: 2021 Dev-Matching: 웹 백엔드 개발자(상반기) (0) | 2022.07.09 |
---|---|
프로그래머스 - 신고 결과 받기 java :: 2022 KAKAO BLIND RECRUITMENT (0) | 2022.07.09 |
프로그래머스 - 키패드 누르기 java :: 2020 카카오 인턴십 (0) | 2022.07.08 |
프로그래머스 - 신규 아이디 추천 java :: 2021 KAKAO BLIND RECRUITMENT :: 72410 (0) | 2022.07.08 |
프로그래머스 - 크레인 인형뽑기 게임 java :: 2019 카카오 개발자 겨울 인턴십 :: 64061 (0) | 2022.07.07 |