본문 바로가기
PS/BOJ

[코틀린, 자바] 백준 1094 - 막대기 (boj kotlin java)

by Nahwasa 2022. 7. 20.

문제 : 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);
    }
}

 

댓글