티스토리 뷰
11723번: 집합
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
www.acmicpc.net
문제 설명
어떤 집합(1~20까지 있음)이 있다고 가정할 때, 그 집합에 대한 일련의 연산들을 처리하는 문제이다.
문제 풀이
집합이라는 이름만 듣고 허겁지겁 다른 집합 관련 알고리즘들을 떠올렸던 것 같다.
사실 직접 비슷한 집합 구조를 구현하고 문제를 풀어도 틀리지는 않을 것 같다.
다만 그렇게 구현하려면 많이 귀찮기도 하고 요소가 20개 정도인 집합에 적용하기에는 비효율적이다.
집합의 요소가 20개로 한정되어 있고, 그것이 있거나(1) 없거나(0)만 처리하면 되는 부분에 주목하자.
이를 고려하면 해당 문제는 비트마스크로 쉽게 풀어줄 수 있다.
집합을 20자리 00000.. 으로 표현하고, 이때 어떤 요소가 있고 없고를 1, 0 으로 처리하는 것이다.
그리고 문제에서 나오는 연산들을 전부 비트 연산으로 처리하면 쉽고 빠르게 구현할 수 있다.
소스 코드
github.com/onaeonae1/ProblemSovling/blob/master/BOJ%2011723.cpp
onaeonae1/ProblemSovling
Problem Solving(BOJ/AOJ/Programmers) with C++. Contribute to onaeonae1/ProblemSovling development by creating an account on GitHub.
github.com
노트
*사실 동아리에서 비트마스크 문제를 풀자고 해서 해당 문제를 풀게 되었다. 즉, 비트마스크라는 것을 알고 풀었다.
*다른 문제를 접해도 비트마스크 문제인지 판별하려면 길이가 고정되어 있고, 0혹은 1로만 표현할 수 있는지를 고려하자
'Problem Solving' 카테고리의 다른 글
프로그래머스 위장 (0) | 2022.01.10 |
---|---|
[PS]2021 KAKAO BLIND RECRUITMENT 2021 : 메뉴 리뉴얼 (0) | 2021.02.02 |
BOJ 2252: 줄 세우기 (0) | 2020.10.17 |
BOJ 12865: 평범한 배낭 (0) | 2020.10.16 |
BOJ 17827 : 달팽이 리스트 (0) | 2020.08.27 |
- Total
- Today
- Yesterday
- cipher suite
- vscode
- BOJ
- Remote
- requests
- 최대한 간략화하기
- 백준
- endl을절대쓰지마
- Python
- django testcase
- SQL
- Til
- 위상정렬
- docker-compose update
- 이것도모르면바보
- 스택
- Event Sourcing
- 힙
- 코딩테스트
- factory_pattern
- jwt
- SSL
- django test
- 우선순위큐
- 파이썬
- Javascript
- 그리디
- 삽질
- 불필요한 값 무시하기
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |