문제 : boj1094
결국 64에서 시작해서 2씩 나눠가면서 나오는 64, 32, 16, 8, 4, 2, 1을 하나씩만 사용해서 숫자 X를 표현하는 문제이다.
눈썰미가 있다면 막대기로 바꿔서 표현했지만 결국 2진법 표현방식과 동일하다는 것을 알 수 있을 것이다.
즉, 이 문제는 X라는 10진수를 받아서 2진법으로 표현했을 때 비트가 1인게 몇개냐고 묻는 문제와 동일하다. 예를들어 23을 보자. 23을 2진법으로 표현하면, 23=16+4+2+1 이므로 다음과 같다. 23(10) = 0010111(2)
그럼 저 비트 1인 부분에 막대기가 하나씩 들어가주면 된다. 따라서 비트의 수를 세보면 4개이므로 4가 답이다.
이하 코드에서 자바의 경우엔 직접 비트를 세줬다. 그리고 코틀린으로는 Integer.bitCount()를 사용해서 비트수를 세줬다. 물론 자바에서도 마찬가지로 한 줄로 가능하다 (System.out.println(Integer.bitCount(new Scanner(System.in).nextInt()));).
코드(kotlin) : github
fun main(){print(Integer.bitCount(readln().toInt()))}
코드(java) : github
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
int x = new Scanner(System.in).nextInt();
int cnt = 0;
for (int i=0; i<=6; i++) cnt+=(x&1<<i)!=0?1:0;
System.out.println(cnt);
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 10504 - 덧셈 (boj java) (0) | 2022.07.22 |
---|---|
[자바] 백준 18114 - 블랙 프라이데이 (boj java) (0) | 2022.07.21 |
[자바] 백준 12100 - 2048 (Easy) (boj java) (0) | 2022.07.20 |
[코틀린, 자바] 백준 2273 - 줄 서기 (boj kotlin java) (0) | 2022.07.19 |
[코틀린, 자바] 백준 9723 - Right Triangle (boj kotlin java) (0) | 2022.07.18 |
댓글