2024. 1. 2. 21:31ㆍ코딩테스트 정리(자바)
내 풀이
class Solution {
public int solution(String s) {
StringBuilder sb=new StringBuilder();
String str="";
for(char ch:s.toCharArray()){
if(!Character.isAlphabetic(ch)) {//숫자라면
sb.append(ch); //담기
continue;
}
//문자라면 str에 이어붙힘
str+=Character.toString(ch);
switch(str){
case "zero":{
sb.append("0");
str=""; //str초기화
break;
}
case "one":{
sb.append("1");
str=""; //str초기화
break;
}
case "two":{
sb.append("2");
str=""; //str초기화
break;
}
case "three":{
sb.append("3");
str=""; //str초기화
break;
}
case "four":{
sb.append("4");
str=""; //str초기화
break;
}
case "five":{
sb.append("5");
str=""; //str초기화
break;
}
case "six":{
sb.append("6");
str=""; //str초기화
break;
}
case "seven":{
sb.append("7");
str=""; //str초기화
break;
}
case "eight":{
sb.append("8");
str=""; //str초기화
break;
}
case "nine":{
sb.append("9");
str=""; //str초기화
break;
}
default:
continue;
}
}
int answer = Integer.parseInt(sb.toString());
return answer;
}
}
1. Character.isAlphabetic(ch)
: ch값이 문자(알파벳 또는 한글)라면 true, 아니라면 false를 반환하는 메서드
책에서의 깔끔한 풀이
: 각 숫자를 나타내는 영단어를 배열에 보관하고
배열을 순회하며 s에 word [i] 단어가 있다면 해당 숫자의 문자열로 바꾼다.
그 후 전체 문자를 숫자로 변환한다.
시간복잡도는 words의 길이 m 만큼 순회하며
replace() 메서드를 실행한다.
원본 문자열 s의 길이를 n이라 할 때, replace() 메서드는 O(n)의 시간복잡도를 가진다.
-> O(mn)
public class Solution {
private static final String[] words = {
"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
};
public int solution(String s) {
for (int i = 0; i < words.length; i++) {
s = s.replace(words[i], Integer.toString(i));
}
return Integer.parseInt(s);
}
}
1. replace([기존문자], [바꿀문자])
: 문자열에 존재하는 기존 문자열을 다른 문자열로 바꿔서 반환
(char 타입도 가능하고 CharSequence 타입도 가능하다. CharSequence는 인터페이스이고 String 클래스, StringBuilder 클래스를 가지고 있다.
따라서 String 타입과 StringBuilder 타도 가능.)
replaceAll([정규식], [바꿀문자])
:replace() 메서드와 기능은 동일하나 첫 번째 인자 값으로 정규식이 들어간다
(String 타입만 가능)
String a = "무궁화. 삼천리. 화려강산. 대한사람. 대한으로. 길이. 보전하세 ";
//replace([기존문자],[바꿀문자])
a = a.replace(".", "/");
System.out.println(a);
//결과값 : 무궁화/ 삼천리/ 화려강산/ 대한사람/ 대한으로/ 길이/ 보전하세
SString a = "무궁화. 삼천리. 화려강산. 대한사람. 대한으로. 길이. 보전하세 ";
//replaceAll([정규식],[바꿀문자])
a = a.replaceAll(".", "/");
System.out.println(a);
//결과값 : /////////////////////////////////////
-> 정규식에서 "."은 모든 문자를 의미하기 때문에 모든 문자가 바뀐다.
2. Integer.toString(i)
: int 타입의 숫자 i를 문자열로 변환한다.
Integer.parseInt(str)의 반대 기능을 한다.
'코딩테스트 정리(자바)' 카테고리의 다른 글
| 프로그래머스 - 신규 아이디 추천 (Level 1) (0) | 2024.01.04 |
|---|---|
| 프로그래머스 - 문자열 다루기 기본 (Level 1) (0) | 2024.01.04 |
| 프로그래머스 - 문자열 내 p와 y의 개수 (Level 1) (2) | 2024.01.02 |
| 프로그래머스 - 이진 변환 반복하기 (Level 2) (0) | 2023.12.31 |
| 프로그래머스 - 3진법 뒤집기 (Level 1) (0) | 2023.12.31 |