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

·2022년 12월 27일
0

프로그래머스

목록 보기
3/59

📌 문제 설명

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

📌 제한 사항

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

📌 입출력 예

numbersresult
"onetwothreefourfivesixseveneightnine"123456789
"onefourzerosixseven"14067

📌 코드

class Solution {
    public long solution(String numbers) {
        String answer = null;
        long ans = 0;
        String [] numOfEng = 
        {"zero","one","two","three","four","five","six","seven"
        ,"eight", "nine"};
        int [] n = {0,1,2,3,4,5,6,7,8,9};
        String str = null;
        for(int i = 0; i < numbers.length(); i++)
        {
            if(i == 0) str = numbers.substring(i, i+1);
            else str = str.concat(numbers.substring(i, i+1));
            for(int j = 0; j < num.length; j++)
            {
                if(str.equals(numOfEng[j])) {
                    if(answer == null) {
                        answer = String.valueOf(n[j]);
                        if(answer.equals("0"))
                            answer = "";
                    }
                    else answer = answer.concat(String.valueOf(n[j]));
                    str = "";
                }
            }
        }
       ans = Long.parseLong(answer);
       return ans;
    }
}

📌 문제 해결 과정

정말 다소 복잡한 풀이 과정인 것 같긴 하지만...

💡 먼저 for문 내에서 i가 0일 때, 즉, 맨 처음에는 numbers의 맨 첫 글자를 str에 그냥 바로 넣어 주며 맨 처음이 아닐 때는 무조건 한 글자씩 잘라서 concat()을 이용해 병합시켜 준다

💡 중첩 for문은 str을 위한 건데, concat()을 통해 이어진 문자들이 배열 numOfEng에 있는 원소들 중 하나와 같다면 answer에 배열 n에서 알맞은 숫자를 찾아서 String으로 바꿔 준 후 concat()으로 이어지게 해 주며 만약에 answer가 null인 상태라면 그냥 바로 대입해 준다 하지만 4번 제한 사항에 따라 0이 제일 앞에 올 수 없으므로 answer에 제일 먼저 들어간 것이 0이라면 answer을 아무것도 없는 상태로 초기화시켜 준다

💡 숫자들이 문자 형태로 다 이어지게 되었다면 마지막에 long형 변수인 ans에 answer을 long 형태로 바꾸어 넣어 준 후 return 해 주면 된다

한 번 만에 통과된 게 신기한... 🤩

profile
공부는 많은 양을 하진 않더라도 꾸준히 매일 하기

0개의 댓글