프로그래머스) 숫자 문자열과 영단어

동동주·2025년 7월 18일
0

코딩테스트

목록 보기
3/3

문제

문제 링크

숫자의 일부 자릿수를 영단어로 바꾸는 문제입니다.

1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"

풀이

풀이 1

처음에는 노가다로 풀었다.. 일치하는 게 있는지 하나하나 확인하는..

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"); 

풀이 2

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));
}

풀이 3

다른 사람들 풀이를 보니 훨씬 간단히 풀 수 있는 문제였다..


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);
    }
}

TIL

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"}

0개의 댓글