프로그래머스 숫자 문자열과 영단어 [Java]
문제출처
https://programmers.co.kr/learn/courses/30/lessons/81301
코딩테스트 연습 - 숫자 문자열과 영단어
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자
programmers.co.kr
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
String tmp = "";
for(int i = 0; i < s.length(); i++){
if(!(97 <= s.charAt(i))){
answer = answer * 10 + Integer.valueOf(s.charAt(i)) - 48;
continue;
}
tmp += s.charAt(i);
switch(tmp){
case "zero":
answer = answer * 10;
tmp = "";
break;
case "one":
answer = answer * 10 + 1;
tmp = "";
break;
case "two":
answer = answer * 10 + 2;
tmp = "";
break;
case "three":
answer = answer * 10 + 3;
tmp = "";
break;
case "four":
answer = answer * 10 + 4;
tmp = "";
break;
case "five":
answer = answer * 10 + 5;
tmp = "";
break;
case "six":
answer = answer * 10 + 6;
tmp = "";
break;
case "seven":
answer = answer * 10 + 7;
tmp = "";
break;
case "eight":
answer = answer * 10 + 8;
tmp = "";
break;
case "nine":
answer = answer * 10 + 9;
tmp = "";
break;
}
}
return answer;
}
}
문자열의 글자를 하나씩 확인해서 숫자면 바로 answer에 더해주고 아니면 문자열 하나를 만든 후에 더하는 방식으로 풀었다.
다른 사람 풀이를 보고나니 replaceAll이라는 신세계가.... 나는 valueOf를 쓰는 바람에 -49라는 알아보기도 애매한 연산이 추가되고 만약 문자열의 길이가 엄청 길어진다면 반복문을 많이 돌아야하는 비효율적인 방식이다.
다른 사람 풀이 보고 다시 풀어본 방식
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
String[] number = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for(int i = 0; i < 10; i++){
s = s.replaceAll(number[i], Integer.toString(i));
}
answer = Integer.parseInt(s);
return answer;
}
}
이렇게하면 코드도 훨씬 간결해지고 반복문도 10번밖에 돌지 않는다.
'문제풀이 > 코딩테스트' 카테고리의 다른 글
프로그래머스 크레인 인형뽑기 게임 [Java] (0) | 2022.02.18 |
---|---|
프로그래머스 키패드 누르기 [Java] (0) | 2022.02.15 |
프로그래머스 신규 아이디 추천 [Java] (0) | 2022.02.13 |
프로그래머스 신고 결과 받기 [Java] (0) | 2022.02.11 |
백준 1157번 : 단어 공부 (0) | 2021.05.29 |