Algorithms/프로그래머스

[프로그래머스] '외계행성의 나이' - Java

LEFT 2023. 4. 16. 19:19

<문제 제시>

<문제설명>
우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.

<예시 입출력>


<문제 해결 과정>

암호해독과 마찬가지로 하나의 문자에 다른 문자가 대응되는 문제이다.

입력받는 숫자에 따라 "문자"를 구성하여 리턴하면 되었다.

solution()함수 외로 planet() 함수를 만들어 그 안에 switch-case문으로 대응되는 문자를 작성하고 

필요시마다 함수를 호출하여 그 값을 변환하면 되었다.

String answer = "";
        
// 나이를 알파벳으로 말하는 행성
// a = 0, b = 1... j = 9 
// ex) 23살은 cd

int t1, t2, t3, t4;
// t1 = 천의 자리, t2 = 백의 자리, t3 = 십의 자리, t4 = 일의 자리

// 나이가 일의 자리일 경우
if(0 < age && age < 10){
    t4 = age / 1;
    answer += planet(t4);
}

t1, t2, t3, t4를 두고 숫자의 자릿수를 분석한다. 각 자릿수별로 분석하여 하나하나 바꿔놓은 후 누적하는 것이

효율적이라고 생각하였다. 나이가 일의자리일 경우 planet 함수에 int num을 보내고 case에 따라 alphabet = '?'을 업데이트하여

return alphabet을 해주었다.

// 나이가 백의 자리일 경우
else if(100 <= age && age < 1000){
    t2 = age / 100;
    age %= 100;
    answer += planet(t2);

    t3 = age / 10;
    age %= 10;
    answer += planet(t3);

    t4 = age / 1;
    answer += planet(t4);

    return answer;
}

100의 자리일 경우에는 t2, t3, t4가 이러한 방식으로 변환이 된다.

// 나이가 1000살일 경우
else if(age == 1000){
    answer = "baaa";
    return answer;
}

 

나이는 1000살이하라고 제한되었기 때문에 1000일때의 값만 처리해주면 나머지는 999 이하이므로 

백의자리 처리만 조건문에 작성해주면 되었다.


<전체코드>

public class planet_age {

	public static char planet(int num){
        char alphabet = 0;
        
        switch(num){
            case 0 : alphabet = 'a';
                break;
            case 1 : alphabet = 'b';
                break;
            case 2 : alphabet = 'c';
                break;
            case 3 : alphabet = 'd';
                break;
            case 4 : alphabet = 'e';
                break;
            case 5 : alphabet = 'f';
                break;
            case 6 : alphabet = 'g';
                break;
            case 7 : alphabet = 'h';
                break;
            case 8 : alphabet = 'i';
                break;
            case 9 : alphabet = 'j';
                break;
        }
        
        return alphabet;
    }
    
    public static String solution(int age) {
        String answer = "";
        
        // 나이를 알파벳으로 말하는 행성
        // a = 0, b = 1... j = 9 
        // ex) 23살은 cd
        
        int t1, t2, t3, t4;
        // t1 = 천의 자리, t2 = 백의 자리, t3 = 십의 자리, t4 = 일의 자리
        
        // 나이가 일의 자리일 경우
        if(0 < age && age < 10){
            t4 = age / 1;
            answer += planet(t4);
        } 
        
        // 나이가 십의 자리일 경우
        else if(10 <= age && age < 100){
            t3 = age / 10;
            age %= 10;
            answer += planet(t3);
            
            t4 = age / 1;
            answer += planet(t4);
            
            return answer;
        }
        
        // 나이가 백의 자리일 경우
        else if(100 <= age && age < 1000){
            t2 = age / 100;
            age %= 100;
            answer += planet(t2);
            
            t3 = age / 10;
            age %= 10;
            answer += planet(t3);
            
            t4 = age / 1;
            answer += planet(t4);
            
            return answer;
        }
        // 나이가 1000살일 경우
        else if(age == 1000){
            answer = "baaa";
            return answer;
        }
        
        return answer;
    }
	
	public static void main(String[] args) {
		int age = 23;
		
		System.out.println(solution(age));
	}

}

최대공약수, 최소공배수를 구하는 문제와 같이 함수를 한개 더 작성하여 기능별로 호출하는 것에 익숙해져야했다.

숫자는 자릿수를 % 와 / 로 잘라낼 수 있기때문에 자릿수별로 처리하는 것이 주요했다.


문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120834

 

프로그래머스

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

programmers.co.kr