중복되서 입력 된 수를 제거하고 출력하면 되는 문제이다.
하지만 메모리 제한이 8MB밖에 안되기 때문에 수를 그냥 입력받아서 저장하기에는 무리가 있다.
그래서 비트마스킹을 이용하여 사용한 수에 해당하는 비트를 켜주고 수를 받았을 때 비트가 켜져 있는지 확인하고 출력하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <cstdio> #include <algorithm> using namespace std; int c[1 + (1 << 20)]; int a, x, y; int main() { while (scanf("%d", &a) != EOF) { x = a / 32; y = a % 32; if (c[x] & (1 << y)) continue; printf("%d ", a); c[x] += (1 << y); } return 0; } | cs |
'알고리즘 관련 > BOJ' 카테고리의 다른 글
BOJ)1654 랜선 자르기 (0) | 2017.01.06 |
---|---|
BOJ)4627 뛰어라 도마뱀 (0) | 2017.01.06 |
BOJ)1647 도시 분할 계획 (0) | 2017.01.06 |
BOJ)4948 베르트랑 공준 (0) | 2017.01.06 |
BOJ)12842 튀김 소보루 (0) | 2017.01.05 |