codewars - Bit Counting(6 Kyu)

codewars - Bit Counting(6 Kyu)

728x90

이번에 코드워즈라는 새로운 사이트를 알게 되어서 틈틈히 이 사이트의 문제도 하나씩 올려볼까 합니다. 사실 이 사이트는 백준이나 프로그래머스와 다르게 사용자가 직접 문제를 출제하는 터라, 영어로 치면 그대로 git 사이트가 나옵니다만, 설명이나 문제가 다 영어로 되어 있는 터라... 한글로 한 번 적어보는게 목표입니다.

제가 처음으로 codewars에서 풀게된 문제는 Bit Counting입니다. 물론 처음 사이트를 들어오고 나서, 문제 설명이 영어로 되어 있어서 좀 당황했습니다. 생각해보니 외국 사이튼데 한국어로 적혀있으면 그게 더 어색할 것 같더라구요. 그래서 제 부족한 실력으로 해석해서 풀어보았습니다.

Write a function that takes an integer as input, and returns the number of bits that are equal to one in the binary representation of that number. You can guarantee that input is non-negative.

Example: The binary representation of 1234 is 10011010010, so the function should return 5 in this case

일단 입력은 integer로 주어진답니다. 그리고 그 숫자의 비트 중에서 1이 몇 개나 등장하는지를 반환하는 그런 문제입니다. 참고로 음수는 나오지 않는다고 하네요.

문제의 이해는 어렵지 않다고 생각 되어서 바로! 구리디 구린 제 정답 코드를 먼저 공개하겠습니다.

public class BitCounting { public static int countBits(int n){ String binaryString = Integer.toBinaryString(n); int count = 0; for (int i = 0; i < binaryString.length(); i++) { if (binaryString.charAt(i) == '1') count++; } return count; } }

위가 제 코드인데, 아는 메소드 내에서 작성한 코드라 굉장히 길었습니다. 이거보다 훨씬 더 짧을 수 있었죠.

아래는 베스트 코드입니다. 이미 자바 내에서는 비트카운팅 관련 메소드를 지원해주고 있었던 거죠...(이렇게 부족한 지식을 하나씩 채우나 봅니다.)

public class BitCounting { public static int countBits(int n){ return Integer.bitCount(n); } }

그리고 코드를 구경하다가 좀 더 신박한 코드를 발견했습니다. 위 코드는 기본 지식이 들어맞은 느낌이라면 아래는 좀 참신하다고 해야 하나...

public class BitCounting { public static int countBits(int n){ String s = Integer.toBinaryString(n); return s.length() - s.replace("1", "").length(); } }

코드워즈에서 올리는 코드들은 항상 다 풀고 나서 clever한 코드와 bestPractice로 선정된 코드들을 같이 올릴 것 같습니다. 백준과 프로그래머스랑은 조금 다른 느낌의 사이트 이기도 하고, 여기는 정말 수준 차이가 난다고 할만한 코드들이 많은 느낌이라서요. 확실히 제 수준이 모자라다는 것을 다시금 깨닫게 되었습니다.

728x90

from http://no-dev-nk.tistory.com/49 by ccl(A) rewrite - 2021-09-26 14:02:03