Posis

[프로그래머스] 영어가 싫어요 본문

알고리즘/프로그래머스

[프로그래머스] 영어가 싫어요

CooNiHong 2022. 12. 8. 19:13

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/120894

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.

제한사항

  • numbers는 소문자로만 구성되어 있습니다.
  • numbers는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있습니다.
  • 1 ≤ numbers의 길이 ≤ 50
  • "zero"는 numbers의 맨 앞에 올 수 없습니다.

입출력 예

numbers result
"onetwothreefourfivesixseveneightnine" 123456789
"onefourzerosixseven" 14067

입출력 예 설명

입출력 예 #1

  • "onetwothreefourfivesixseveneightnine"를 숫자로 바꾼 123456789를 return합니다.

입출력 예 #1

  • "onefourzerosixseven"를 숫자로 바꾼 14067를 return합니다.

나의 풀이

Java

class Solution {
    public long solution(String numbers) {
        long answer = 0;
        String[] strArr = numbers.split("");
        String str = "";
        String numStr = "";
        for(int i = 0; i < strArr.length; i++) {
            str += strArr[i];
            switch(str) {
                case "one":
                    numStr += 1;
                    str = "";
                    break;
                case "two":
                    numStr += 2;
                    str = "";
                    break;
                case "three":
                    numStr += 3;
                    str = "";
                    break;
                case "four":
                    numStr += 4;
                    str = "";
                    break;
                case "five":
                    numStr += 5;
                    str = "";
                    break;
                case "six":
                    numStr += 6;
                    str = "";
                    break;
                case "seven":
                    numStr += 7;
                    str = "";
                    break;
                case "eight":
                    numStr += 8;
                    str = "";
                    break;
                case "nine":
                    numStr += 9;
                    str = "";
                    break;
                case "zero":
                    numStr += 0;
                    str = "";
                    break;
                default:
            }
        }
        answer = Long.parseLong(numStr);
        return answer;
    }
}

// 방법 2
class Solution {
    public long solution(String numbers) {
        long answer = 0;
        String[] strArr = numbers.split("");
        StringBuilder sb = new StringBuilder();
        String str = "";
        for(int i = 0; i < strArr.length; i++) {
            str += strArr[i];
            switch(str) {
                case "one":
                    sb.append(1);
                    str = "";
                    break;
                case "two":
                    sb.append(2);
                    str = "";
                    break;
                case "three":
                    sb.append(3);
                    str = "";
                    break;
                case "four":
                    sb.append(4);
                    str = "";
                    break;
                case "five":
                    sb.append(5);
                    str = "";
                    break;
                case "six":
                    sb.append(6);
                    str = "";
                    break;
                case "seven":
                    sb.append(7);
                    str = "";
                    break;
                case "eight":
                    sb.append(8);
                    str = "";
                    break;
                case "nine":
                    sb.append(9);
                    str = "";
                    break;
                case "zero":
                    sb.append(0);
                    str = "";
                    break;
                default:
            }
        }
        answer = Long.parseLong(sb.toString());
        return answer;
    }
}

// 방법 3
class Solution {
    public long solution(String numbers) {
        numbers = numbers.replaceAll("one", "1");
        numbers = numbers.replaceAll("two", "2");
        numbers = numbers.replaceAll("three", "3");
        numbers = numbers.replaceAll("four", "4");
        numbers = numbers.replaceAll("five", "5");
        numbers = numbers.replaceAll("six", "6");
        numbers = numbers.replaceAll("seven", "7");
        numbers = numbers.replaceAll("eight", "8");
        numbers = numbers.replaceAll("nine", "9");
        numbers = numbers.replaceAll("zero", "0");
        Long answer = Long.parseLong(numbers);
        return answer;
    }   
}

방법1

 

방법2
방법3

처음으로 짠 코드는 방법1이지만 처리속도가 상당히 좋지않아서 여러가지로 리패터링 해봤습니다. 프로그래머스에서 알고리즘을 계속 풀면서 느낀점은 switch문은 처리속도가 많이 느리다는 것을 알게되었고 문자열을 합칠때에도 String보다는 StringBuilder가 더 좋다는 것을 알게됨

JavaScript

function solution(numbers) {
    const obj = {
        zero: 0,
        one: 1,
        two: 2,
        three: 3,
        four: 4,
        five: 5,
        six: 6,
        seven: 7,
        eight: 8,
        nine: 9
    };

    const num = numbers.replace(/zero|one|two|three|four|five|six|seven|eight|nine/g, (v) => {
        return obj[v];
    });

    return Number(num);
}

 

728x90