220110_알고리즘

Minseok-Choi·2022년 1월 10일
0

알고리즘

목록 보기
3/13
post-thumbnail

숫자 문자열과 영단어

역시 다양한 메서드를 연습해봐야해😂

  • 알고리즘 공부를 하면서 메서드를 쪼개고, 테스트를 작성해보는 연습을 많이 해보려고 한다.
  • 또한 else를 절대 쓰지않고, 들여쓰기를 최소화하는 노력을 하고있다.
  • 머릿속에서 그림이 잘 안그려지면, 일단 구현해보자 하는 때가 더 많기는 하지만..
  • 문제를 처음 봤을 때, 어제 푼 문제랑 큰 차이가 없을 것이라고 생각했었다.
  • 어찌 됐든, mapstringbuilder로 구현하면 쉽겠다고 생각했고, 그렇게 구현을 성공하기는 했다.
  • 하지만 나만의 목표는 거의 성공시키지못했음ㅎ
  • 아래는 제가 작성한 코드입니다.
import java.util.Map;

public class numberStringAndWords {

    static Map<String, Integer> numberMap = Map.of("zero", 0,
            "one", 1,
            "two", 2,
            "three", 3,
            "four", 4,
            "five", 5,
            "six", 6,
            "seven", 7,
            "eight", 8,
            "nine", 9);

    static int solve(String s) {

        StringBuilder answer = new StringBuilder();
        StringBuilder chars = new StringBuilder();

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (isNum(c)) {
                answer.append(c);
            } else {
                chars.append(c);
                if (isStringNum(chars.toString())) {
                    answer.append(numberMap.get(chars.toString()));
                    chars.delete(0,chars.length()-1);
                }
            }
        }

        return Integer.parseInt(answer.toString());
    }

    private static boolean isNum(char c) {
        return c >= '0' && c <= '9';
    }

    private static boolean isStringNum(String str) {
        return str.length() >= 3 && numberMap.containsKey(str);
    }
  • 풀이를 완료하고, 다른 사람의 코드를 보는데 .... 괜히 억울한 기분
  • 아래의 코드는 프로그래머스 최상단 풀이를 참고하여 작성하였습니다.

    static String[] numbers = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

    static int string2int(String str) {
        for (int i = 0; i < numbers.length; i++) {
            str = str.replace(numbers[i], Integer.toString(i));
        }
        return Integer.parseInt(str);
    }
  • 다시 한번, String.replace()의 활용을 생각하게 되었다.
profile
차곡차곡

0개의 댓글