[2021 카카오 채용 연계형 인턴십] 숫자 문자열과 영단어

Wintering·2022년 8월 19일
0

Algorithm

목록 보기
11/16

1hours

  1. 영단어와, 숫자쌍의 hashmap 만들기
  2. 받은 문자열의 문자를 하나씩 돌면서 검사하기
    • 받은 문자열의 문자가 숫자라면 -> 그대로 정답 Stringbuilder에 추가하기
    • 받은 문자열의 문자가 문자라면 -> target문자열 StringBuilder에 추가하기
  3. for문이 한번 돌 때마다, target문자열이 hashmap의 key값에 존재하는 지 검사하기
    • 존재한다면, key값에 해당하는 value를 빼내서 정답 Stringbuilder에 추가하고, setLength(0)를 이용해서
      StringBuilder 초기화
    • 존재하지 않는다면 다음 for문 돌리기
import java.util.HashMap;

/**
 * 2021 카카오 채용연계형 인턴쉽_숫자문자열과영단어
 */
public class Solution {

    public static void main(String[] args) {
        String s = "one4seveneight";
        int result = solution(s);
        System.out.println(result);
    }

    public static int solution(String s) {
        HashMap<String, Integer> dic = new HashMap<String, Integer>() {{
            put("zero", 0);
            put("one", 1);
            put("two", 2);
            put("three", 3);
            put("four", 4);
            put("five", 5);
            put("six", 6);
            put("seven", 7);
            put("eight", 8);
            put("nine", 9);
        }};

        StringBuilder str_answer = new StringBuilder();
        StringBuilder target = new StringBuilder();

        for (int i = 0; i < s.length(); i++) {
            if (Character.isDigit(s.charAt(i))) {
                str_answer.append(s.charAt(i));
            } else {
                target.append(s.charAt(i));
                if (dic.containsKey(String.valueOf(target))) {
                    str_answer.append(dic.get(String.valueOf(target)));
                    target.setLength(0);
                }
            }
        }

        int answer = Integer.parseInt(String.valueOf(str_answer));

        return answer;
    }
}

Point

  1. 받은 문자가 숫자인지 문자인지 판별할 때는 Character의 isDigit() 함수를 활용해보자
  2. StringBuilder를 초기화 시킬 때는 setLength(0)을 활용해보자
    • delete도 있지만, 객체를 새로 생성해서 지워내는 delete보다는 단순히 길이를 0으로 만들어 초기화시키는 setLength(0)의 효율이 더 좋다.

다른사람의 풀이

대부분 replaceAll()을 썼다.

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        int len = s.length();
        String[] digits = {"0","1","2","3","4","5","6","7","8","9"};
        String[] alphabets = {"zero","one","two","three","four","five","six","seven","eight","nine"};

        for(int i=0; i<10; i++){
            s = s.replaceAll(alphabets[i],digits[i]);
        }

        return Integer.parseInt(s);
    }
}

뭐지..? 굉장히 간단하다.

replaceAll()

String replaceAll(String regex, String replacement)

  • replaceAll() 함수는 대상 문자열을 원하는 문자값으로 변환하는 함수다.
  • 첫번째 매개변수는 변환하고자 하는 대상
  • 두번째 매개변수는 변환할 문자값

세상에... 이런 게 있었고 나는 몰랐다니.. 멍청했따...

0개의 댓글