문제 (+효율성)
양수 N이 주어지고 이 숫자를 이진수로 바꿨을 때, 1 사이에 낀 0의 최대 개수 구하기
예시
N(10) | N(2) | return |
---|---|---|
9 | 1001 | 2 |
529 | 1000010001 | 4 |
20 | 10100 | 1 |
15 | 1111 | 0 |
32 | 100000 | 0 |
풀이
JAVA - 100%
- 주어진 N을 binaryString 로 만든다.
- String을 char[] 로 만든다.
- 제일 큰 수를 돌려주기위한
int countMax = 0;
, 1과 1 사이 0의 개수를 세기 위한int countLocal=0
을 정의한다. - char[]를 하나씩 돌면서 '1'과 XOR 연산을 한다.
4-1. XOR 연산이 0보다 크면 countLocal을 증가시킨다.
4-2. XOR 연산이 0이면 countMax와 countLocal을 비교해 큰 수를 countMax에 저장한다. - countMax 가 최종 값 이므로 반환시킨다.
TIP
XOR : 같으면 0, 다르면 1
- 비트연산이 빠르기 때문에 중복값 처리하는 문제에서 사용하기 좋음