cleanUrl: /posts/java-integer-bit-count-function

leetcode 에서 문제를 풀다가 Integer.bitCount 라는 함수를 알게되었다. 이걸 진작에 알았더라면 여러 알고리즘 문제를 겁나 편하게 풀었을텐데 이진수에서 1의 개수를 세어주는 함수이다.

Binary Watch - LeetCode

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8f99559c-aced-4d39-bb07-69d769f520f8/Binary_clock_samui_moon.jpg

이러한 시계에서 불이 n개 켜졌을때 반환할 수 있는 시간들을 String List 로 반환하라는 문제이다.

근데 저 시계 좀 간지나는거 같다

Hour 는 0 ~ 11 까지 존재한다 (12까지 존재하는줄 알고 짯다가 테스트 케이스에서 걸림)

Minutes 는 0 ~ 59 까지 존재한다

각 정수를 h, m 을 binary 로 변경했을때 1의 개수의 합이 num 이 되는 모든 시간을 반환한다

class Solution {
  public List<String> readBinaryWatch(int num) {
    List<String> result = new ArrayList<>();
    for (int h = 0; h <12; h ++) {
      for (int m = 0; m < 60; ++ m) {
        int count = Integer.bitCount(h) + Integer.bitCount(m);
        if (count == num)
          result.add(String.format("%d:%02d", h, m));
      }
	  }
    return result;
	}
}

Integer.bitCount

정수를 매개변수로 넣었을때 그 정수의 1 의 개수를 반환한다

이런 간지나는 함수를 몰랐다니... 이제 알았으니 요긴하게 써먹어야겠다

함께 읽어보면 좋은 글

2의 보수란 무엇인가? 왜 컴퓨터는 2의 보수를 사용할까? what is two's complements