본문 바로가기
Programming/Cos Pro 1급

Cos Pro 1급 - 샘플 문제 풀이 4차 6번 (자아도취 수 구하기)

by 우공80 2022. 10. 29.
728x90

자아도취 수 구하기

문제 지문 #6


어떤 자리 수 k가 주어졌을 때 각 자릿수의 k 제곱의 합이 원래 수가 되는 수를 자아도취 수라고 합니다. 예를 들어 153은 세 자리 자아도취 수입니다.

IMG

자연수 k가 매개변수로 주어질 때, k 자리 자아도취 수들을 배열에 오름차순으로 담아 return 하도록 solution 메소드를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.


#####매개변수 설명

k가 solution 메소드의 매개변수로 주어집니다.

  • k는 3 이상 6 이하인 자연수입니다.

#####return 값 설명

k 자리 자아도취 수를 오름차순으로 정렬한 뒤 배열에 담아 return 합니다.


#####예시

k return
3 [153, 370, 371, 407]

#####예시 설명

  • 153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
  • 370 = 3^3 + 7^3 + 0^3 = 27 + 343 + 0 = 370
  • 371 = 3^3 + 7^3 + 1^1 = 27 + 343 + 1 = 371
  • 407 = 4^3 + 0^3 + 7^3 = 64 + 0 + 343 = 407
728x90

 

혼자 풀이


빈칸 채우기 문제입니다.
빈칸이 칸하나가 아니라 두줄을 채워야 하기 때문에 난이도가 있습니다. 처음 이 문제를 봤으면 못풀었을거 같은데, 앞서 이와 유사하게 자리수별로 계산하는 것을 해보았기 때문에, 시간을 좀 걸렸지만 푸는 것에 성공은 했습니다.

자리수 별로 계산하는 것은 자주 나오는 패턴이니 익숙해지도록 연습하고 외워둘 필요가 있습니다.

k제곱을 구하는 함수를 구현해서 사용했네요. Math.pow()도 동일한 기능을 제공한다는 거 기억해두면 좋겠습니다.

import java.util.Arrays;

class Main {
    public int power(int base, int exponent) { //k제곱을 구하는 함수
        int val = 1;
        for (int i = 0; i < exponent; i++) 
            val *= base;
        return val;
    }
    public int[] solution(int k) {
			//k자리수 자아도취수는 10의 K제곱보다 작음 ex) k가 4이면 자아도취수는 9999가 최대값이고, 10000보다 작음
        int range = power(10, k); 
        int[] answer = new int[range];
        int count = 0;
				//
        for (int i = range / 10; i < range; i++) {
            int current = i;  //현재 계산중인 자리의 수
            int calculated = 0; //각자리의 k제곱을 합함
            while (current != 0) {
                // @@@;
                // @@@;
                calculated+=power(current%10,k); //뒷자리부터 계산함. 10으로 나눈 나머지가 1의 자리임
                current=current/10; //1의 자리가 빠졌으므로 10을 나눈 몫으로 자리수별 계산
            }
            if (calculated == i)  //calculated가 i와 같으면 자아도취수
                answer[count++] = i; //count를 1증가시키고, 배열에 i를 저장
        }

        int[] ret = new int[count];
        for (int i = 0; i < count; i++)
            ret[i] = answer[i];  //answer에서 count만큼 원소를 추출해서 반환
        return ret;
    }

	// 아래는 테스트케이스 출력을 해보기 위한 main 메소드입니다.
    public static void main(String[] args) {
        Main sol = new Main();
        int k = 3;
        int[] ret = sol.solution(k);

        // 실행] 버튼을 누르면 출력값을 볼 수 있습니다.
        System.out.printf("solution 메소드의 반환 값은 ");
        System.out.printf(Arrays.toString(ret));
        System.out.printf(" 입니다.\n");
    }   
}

 

정답


혼자 풀이와 정답이 동일합니다.

실습은 아래 참고


2022.10.25 - [Programming/Cos Pro 1급] - Cos Pro 1급 공부 사이트 추천 - 구름 에듀(https://edu.goorm.io/)

 

Cos Pro 1급 공부 사이트 추천 - 구름에듀(https://edu.goorm.io/)

구름 EDU??? YBM 공식 사이트에서 받은 문제 지문/문제 코드/정답 코드를 intellij에서 공부하다가 후배 추천으로 구름 에듀를 알게 되었습니다. 문제 지문 따로 문제 코드 따로 열어보는 게 여간 불

woogong80.tistory.com

728x90

댓글