문제 :
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;
}
}
'공부 > 코딩 테스트' 카테고리의 다른 글
[Java] 백준 2751번 : 수 정렬하기 2 (0) | 2025.04.05 |
---|---|
[Java] LeetCode 20. Valid Parentheses (0) | 2025.04.03 |
[Java] N번째 거듭제곱 수열 구하기 (0) | 2025.04.02 |
[Java] 백준 15964 이상한 기호 (0) | 2025.03.30 |
[Java] 백준 10807번 : 개수 세기 (2) | 2025.03.29 |