본문 바로가기
PS 문제 풀이/HackerRank

[HackerRank] The Power Sum

by 까망 하르방 2021. 2. 14.
반응형

출처: https://www.hackerrank.com/challenges/the-power-sum/problem

X와 N이 주어졌을 때,

X를 N 거듭제곱 형태로 표현할 수 있는 경우의수를 구하는 문제이다.

 Input 
100
2  

 Output 

3

▶ 재귀 함수 형태 조합을 이용해서 구현


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
public class Solution {
     
    static List<Integer> list;
    static int val, n, answer = 0;
     
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        val = Integer.parseInt(sc.next());
        n = Integer.parseInt(sc.next());
        list = new ArrayList<Integer>();
         
        int i = 1;
        while(true) {
            if(Math.pow(i, n) >= val) {
                if(Math.pow(i, n) == val) list.add(i);
                break;
            }
            list.add(i);
            i++;
        }
         
        // 더해지질의 여부, 지금까지의 합산 값, 더해질 원소의 위치
        powerSum(0, 0, 0);
        powerSum(1, 0, 0);
         
        System.out.println(answer);
    }
 
 
    private static void powerSum(int opr, int sum, int idx) {
        // 리스트 범위를 초과하면 조합 X
        if (idx >= list.size()) return;
         
        // 이번에 고려되는 원소의 거듭 제곱
        int num = (int) Math.pow(list.get(idx), n);
         
        // 0, 1을 곱해 합산 여부를 결정
        sum = sum + (opr * num);
         
        // 조합 성공했다면 count
        if(sum == val) {
            answer++;
            return;
        }
         
        // 목표값을 초과했으면 탐색 종료
        if(sum > val) return;
         
        // 계속 탐색
        powerSum(0, sum, idx + 1);
        powerSum(1, sum, idx + 1);
    }
}

반응형

'PS 문제 풀이 > HackerRank' 카테고리의 다른 글

[HackerRank] Almost Sorted (Java)  (0) 2021.02.14
[HackerRank] Cut the sticks (Java)  (0) 2021.02.14
[HackerRank] Kangaroo (Java)  (0) 2021.02.14
[HackerRank] Absolute Permutation  (0) 2021.02.14
[HackerRank] Jumping on the Clouds  (0) 2021.02.14

댓글