문제 :


N(1<= N <= 100,000,000,000)가 주어졌을때,

1,2,3,4,...N까지 binary값을 구해서

그 binary값이 팰린드롬인 수의 핪을 구하라.


테스트케이스 :

입력 : 1

출력 : 1

1은

바이너리 값이 1이므로 팰린드롬

 

입력 : 3

출력 : 4

3은

1 의 바이너리 값이 1 이므로 팰린드롬 O

2 의 바이너리 값은 10 이므로 팰린드롬 X
3 의 바이너리 값은 11 이므로 팰린드롬 O

1과 3의 합은 4

 

입력 : 5

출력 : 25

1 = 1                                        O

2 = 10                                      X                             

3 = 11                                      O

4 = 100                                     X

5 = 101                                     O

6 = 110                                       X

7 = 111                                       O

8 = 1000                                     X

9 = 1001                                     O

 


풀이 :

import java.util.Random;

public class LongBinary {
    public static void main(String[] args) {
        long start = System.nanoTime();
        Random random = new Random();
        // 1~100,000,000,000
        long n = random.longs(1,100000000000).findFirst().getAsLong();
        System.out.println(n);
        long sum = 0;
        
        for(long i=1; i<=n; i++){
        // 1부터 N까지 순차적으로 
            System.out.println("1. check this number : " +i);
            if(checkPalindrome(i)){
            //팰린드롬이면 더하기
                sum += i;
            } else {
                continue;
            }
        }
        long end = System.nanoTime();
        System.out.println("실행시간 : " + (end-start)/1000000 + "ms");
        System.out.println(sum);
    }

    private static boolean checkPalindrome(long i) {
    // 전달 받은 i의 값을 binary 문자열로 변환
        String binary = Long.toBinaryString(i);
        System.out.println("2. this is binary : "+binary);
        
        int left =0, right = binary.length()-1;
        // 좌측과 우측의 값을 비교해서 다르면 false
        // 같으면 true;
        while(left<right){
            if(binary.charAt(left) != binary.charAt(right)){
                return false;
            }
            left++;
            right--;
        }
        System.out.println("("+i+") is palindrome!!!");
        return true;
    }
}
블로그 이미지

Ahan

책, 영화, 게임! 인생의 활력 요소가 되는 취미들을 하자!

,

문제 :


 

1~X까지의 거듭제곱 수열이 있고,

이 거듭제곱 수열이

1,4,8,9,16 .... 각 제곱의 크기만큼 나열 되어있다.

 

N(1<= N <= 1000) 이란 수가 주어졌을 때

N번째 거듭제곱이 무엇인지 구하라

 


테스트케이스 :

입력 : 1

출력 : 1

 

입력 : 3

출력 : 8

 

입력 : 5

출력 : 16

 


import java.util.*;

public class FindPower { 
    public static void main(String[] args) {
        long start = System.nanoTime();
        Random random = new Random();
        int n = random.nextInt(10000)+1; // 1부터 10,000까지 랜덤한 수
        System.out.println(n);
        long sum = 0;
        
        // 중복 없이 순서대로 저장할 수 있는 TreeSet
        TreeSet<Integer> ts = new TreeSet<Integer>();

        for(int i=1; i<=n; i++){
            for(int j=2; j<=n; j++){
                double a = (double)Math.pow(i,j);
                ts.add((int) a);
            }
        }
        
        // TreeSet을 리스트로 바꿔서 N번째 인덱스 출력 준비
        
        List<Integer> sorted = new ArrayList<>(ts);
        long end= System.nanoTime();
        System.out.println("실행 시간: " + (end - start)/1000000 + "ms");
        
        // 인덱스는 0부터 시작이므로 N-1
        System.out.println(sorted.get(n-1));
    }
}

 

 

 

 

 

블로그 이미지

Ahan

책, 영화, 게임! 인생의 활력 요소가 되는 취미들을 하자!

,