https://www.acmicpc.net/problem/23630
풀이 과정
- & 연산의 경우 두 비트가 모두 1일때만 1, 아닐때는 0으로 설정한다는 점을 이용
- 따라서, 우선 비트의 개수를 저장해 둘 배열을 만들어 둔다.
- array[0] : 0번째 자리에서 비트 1의 개수, ..
- 각각의 수를 모두 2진수로 바꾼 다음 각 자리를 검사하면서 비트가 1인 경우, 배열의 해당 자리 값을 1 증가시킨다.
- &연산의 결과가 0이 되지 않으려면, 연산을 하는 값들의 비트중 하나라도 모두 1이 나와야 한다. 따라서 1이 가장 많이 나온 자리를 찾아주어야 하므로, 배열의 최댓값을 구한다.
소스 코드
import sys
input = lambda: sys.stdin.readline().rstrip()
n = int(input())
sequence = list(map(int, input().split()))
bit_count = [0] * 32
def calc_bit(a):
temp = a
n = 0
while temp > 0:
bit_count[n] += (temp % 2)
temp = temp // 2
n += 1
for item in sequence:
calc_bit(item)
print(max(bit_count))
'알고리즘[Python] > 백준 알고리즘' 카테고리의 다른 글
[ 3151 ] [ 이진 탐색 ] 합이 0 (0) | 2021.12.01 |
---|---|
[ 16922 ] [ BFS ] 로마 숫자 만들기 (0) | 2021.11.30 |
[ 1013 ] [ DFA ] Contact (0) | 2021.11.23 |
[ 14712 ] [ backtracking ] 넴모넴모(Easy) (0) | 2021.11.20 |
[ 17073 ] [ BFS ] 나무 위의 빗물 (0) | 2021.11.18 |