[프로그래머스/Java] Lv.0 영어가 싫어요

febCho·2024년 4월 24일
0

코딩테스트

목록 보기
181/253
post-thumbnail

문제

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

- 제한사항

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

풀이

여러 번 형변환을 거치면서 그다지 효율적으로 풀이한 것 같지는 않다 ㅜ

문자열을 잘라 String[] 형태로 반환 받은 뒤, 루프를 돌며 StringBuffer 객체에 누적, 만약 해당 문자열이 zero~nine 중 하나와 일치한다면 다른 StringBuffer 객체에 영어에 해당하는 숫자를 append() 해주었다. 그리고 setLength() 메서드를 통해 첫 번째 버퍼 객체를 초기화 해주었다.

그리고 루프를 돌며 모든 누적 작업이 끝나면 Long.parseLong()으로 파싱한 다음 반환해 주었다. 메모리/시간 상의 효율을 위해 String이 아니 버퍼 객체를 사용했는데, 2개의 객체를 사용하다 보니 더 정신이 없었던 것 같다.

class Solution {
    public long solution(String numbers) {
        String[] numbersArr = numbers.split("");
        StringBuffer n = new StringBuffer();
        StringBuffer num = new StringBuffer();
        
        for(int i=0; i<numbersArr.length; i++){
            n.append(numbersArr[i]);
            
            if(n.toString().equals("zero")){
                num.append("0");
                n.setLength(0);
            }else if(n.toString().equals("one")){
                num.append("1");
                n.setLength(0);
            }else if(n.toString().equals("two")){
                num.append("2");
                n.setLength(0);
            }else if(n.toString().equals("three")){
                num.append("3");
                n.setLength(0);
            }else if(n.toString().equals("four")){
                num.append("4");
                n.setLength(0);
            }else if(n.toString().equals("five")){
                num.append("5");
                n.setLength(0);
            }else if(n.toString().equals("six")){
                num.append("6");
                n.setLength(0);
            }else if(n.toString().equals("seven")){
                num.append("7");
                n.setLength(0);
            }else if(n.toString().equals("eight")){
                num.append("8");
                n.setLength(0);
            }else if(n.toString().equals("nine")){
                num.append("9");
                n.setLength(0);
            }
        }

        return Long.parseLong(num.toString());
    }
}

결과

profile
Done is better than perfect.

0개의 댓글