https://programmers.co.kr/learn/courses/30/lessons/81301
내가 푼 방법
나는 글자수별로 나눠서 풀었다.
이런식으로 하나씩 읽어가며 3글자가 되었을 때 저중에 있는지 확인, 4글자 되면 저중에 확인, 5글자 확인해서 치환하기!
class Solution {
public int solution(String s) {
int answer = 0;
String alpha="";
String sub = s; // s에 직접 치환하지 않고 sub를 따로 만들었다.
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
if(ch >= 'a' && ch <= 'z'){
alpha += String.valueOf(ch); // alpha에 한글자씩 더한다
if(alpha.length() == 3 && (alpha.equals("one") || alpha.equals("two") || alpha.equals("six"))){
sub = sub.replace("one", "1");
sub = sub.replace("two", "2");
sub = sub.replace("six", "6");
alpha = ""; // 초기화
}
else if(alpha.length() == 4 && (alpha.equals("zero") || alpha.equals("four") || alpha.equals("five") || alpha.equals("nine"))){
sub = sub.replace("zero", "0");
sub = sub.replace("four", "4");
sub = sub.replace("five", "5");
sub = sub.replace("nine", "9");
alpha = "";
}
else if(alpha.length() == 5 && (alpha.equals("three") || alpha.equals("seven") || alpha.equals("eight"))){
sub = sub.replace("three", "3");
sub = sub.replace("seven", "7");
sub = sub.replace("eight", "8");
alpha = "";
}
else
continue;
}
else if (ch >= '0' && ch <= '9')
continue;
}
answer = Integer.parseInt(sub);
return answer;
}
}
s에 바로 치환하지 않고 sub라는 문자열에서 치환한 이유는
one4seveneight 할 때
i = 0 일 때 o
i = 1, n
i = 2, e
-> 문자열 14seveneight
i = 3 일 때 e 값이 나오기 때문이다.
긍까 문자열 자체가 바뀌면서 읽어가던 순서가 뒤죽박죽이 되어버린다.
ㅎㅎ 이전에 푼거에서 배웠던 replace를 활용해봤다~~! 정말 좋아~
짜는건 10분? 걸렸는데 구현이랑 오류를 고치니까 45분정도 걸렸다...! 이제 졸작도 거의 끝났으니까 정진해야지
남의 코드 살펴보기
WOW....
배열에 대치되는 숫자와 문자를 넣고 replaceAll을 사용해서 알파벳을 숫자로 바꿈. ㄷㄷ
replace()와 replaceAll()의 차이점은 replaceAll()은 정규표현식을 사용할 수 있다는 점이다.
그러니까 replaceAll("[abc]", "d"); 이런식으로 입력하면 a -> d, b -> d, c -> d 이렇게 되어 ddd가 출력된다. or [^abc] 하면 abc를 제외한 것들을 바꿔줄 수 있다.
아무튼 저 코드에서는 replace를 사용해도 될거같다. replaceAll 써도 되고...
배열을 하나만 만들고 어차피 for문으로 0~9까지 돌릴꺼니까 걔로 치환해줘도 된다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 크레인 인형뽑기 게임 for JAVA (0) | 2021.11.24 |
---|---|
[프로그래머스] 키패드 누르기 for JAVA (0) | 2021.11.22 |
[프로그래머스] 신규 아이디 추천 for JAVA (0) | 2021.11.05 |
[프로그래머스] 로또의 최고 순위와 최저 순위 for JAVA (0) | 2021.11.04 |
[프로그래머스] 체육복 for JAVA (0) | 2021.10.21 |