숫자의 일부 자릿수를 영단어로 바꾸는 문제입니다.
1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"
처음에는 노가다로 풀었다.. 일치하는 게 있는지 하나하나 확인하는..
if (s.contains("zero")) s = s.replace("zero", "0");
if (s.contains("one")) s = s.replace("one", "1");
if (s.contains("two")) s = s.replace("two", "2");
if (s.contains("three")) s = s.replace("three", "3");
if (s.contains("four")) s = s.replace("four", "4");
if (s.contains("five")) s = s.replace("five", "5");
if (s.contains("six")) s = s.replace("six", "6");
if (s.contains("seven")) s = s.replace("seven", "7");
if (s.contains("eight")) s = s.replace("eight", "8");
if (s.contains("nine")) s = s.replace("nine", "9");
Map으로 풀면 더 깔끔할 것 같았으나!.. 비슷하다
import java.util.*;
import java.io.*;
class Solution {
public int solution(String s) {
Map<String, String> m = new HashMap<>();
m.put("zero", "0");
m.put("one", "1");
m.put("two", "2");
m.put("three", "3");
m.put("four", "4");
m.put("five", "5");
m.put("six", "6");
m.put("seven", "7");
m.put("eight", "8");
m.put("nine", "9");
for (String key : m.keySet()) {
s = s.replace(key, m.get(key));
}
return Integer.parseInt(s);
}
}
for (String key: m.keySet()) {
s = s.replace(key, m.get(key));
}
다른 사람들 풀이를 보니 훨씬 간단히 풀 수 있는 문제였다..
class Solution {
public int solution(String s) {
String[] strArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for(int i = 0; i < strArr.length; i++) {
s = s.replace(strArr[i], Integer.toString(i));
}
return Integer.parseInt(s);
}
}
String에 사용할 수 있는 replace 기억하기
✅ s.replace(String target, String replacement)
모든 target을 찾아서 replacement로 바꿔줌
String s = "one4seveneight";
s = s.replace("one", "1"); // "1"4seveneight
✅ s.replaceAll(String regex, String replacement)
정규표현식(Regex)을 사용할 수 있는 버전
String s = "one1one";
s = s.replaceAll("[a-z]+", "#"); // "#1#"
✅ s.replaceFirst(String regex, String replacement)
정규표현식 기준으로 첫 번째만 바꿈
String s = "oneoneone";
s = s.replaceFirst("one", "1"); // "1oneone"
✅ s.contains(String str)
해당 문자열을 포함하고 있는지 확인 (boolean 반환)
s.contains("one"); // true 또는 false
✅ s.indexOf(String str)
특정 문자열이 처음 나타나는 인덱스 반환. 없으면 -1 반환.
s.indexOf("four"); // 예: 2
✅ s.substring(int start, int end)
문자열 자르기 (start 이상 end 미만)
String s = "123four5";
String sub = s.substring(3, 7); // "four"
✅ s.charAt(int index)
특정 위치의 문자(char)를 얻을 수 있음
char c = s.charAt(0); // '1'
✅ s.split(String regex)
문자열을 기준으로 나눠서 배열로 반환
String[] arr = s.split("four"); // {"123", "5"}