주니어 기초 코딩공부/JAVA_programmers_코딩테스트

영어가 싫어요_programmers_lev00

jju_developer 2022. 12. 16. 21:29
728x90

<코딩 테스트>

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

[ 제한사항 ]

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

 

<나의 풀이 과정>

우선 들어오는 String numbers의 값이 "onetwothreefourfivesixseveneightnine"

일때 이것을 어떻게 잘라서 배열에 담을까? 고민도 했었습니다.

그러다가 들어오는 이 문자열이 영어 "one", "two" 와 같다면 그 값을 0, 1로 바꿔주면 되겠다

라고 생각을 하였습니다.

Stirng 배열 두개를 만들고 replace All 을 사용하였으며,

처음에 오류가 났을 떄에는 

이렇게 지정을 하지 않고

numbers += numbers.replaceAll (num[i], strNum[i]) 를 하여서

계속해서 1twothreefourfivesixseveneightnine+ 12threefourfivesixseveneightnine + 123fourfivesixseveneightnine

...이렇게 더해진 값이 출력되는 오류를 범했습니다.

 

 

<나의 풀이 코드>

class Solution {
    public long solution(String numbers) {
		long answer = 0;
		String[] num = new String[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
		String[] strNum = new String[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
		for (int i = 0; i < strNum.length; i++) {
			numbers = numbers.replaceAll(num[i], strNum[i]);
		}
		System.out.println(numbers);
		answer = Long.parseLong(numbers);
		return answer;
	}
}

 

 

 

<다른 사람 풀이 코드>

class Solution {
    public long solution(String numbers) {

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

            for (int i = 0; i < numbers_arr.length; i++) {
                numbers = numbers.replaceAll(numbers_arr[i], String.valueOf(i));
            }

            long answer = Long.parseLong(numbers);
            return answer;
        }
}

<나의 풀이 코드>

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/59403?language=oracle 

 

프로그래머스

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

programmers.co.kr

 

728x90