본문 바로가기

비트마스킹4

[백준] 14225번 부분수열의 합 (C++) https://www.acmicpc.net/problem/14225 수열이 주어지고 부분수열을 구해서 더했을때 나올 수 없는 가장 작은 수를 출력하는 문제이다.모든 부분수열을 구하여 더한것을 배열에 저장하고 1부터 확인해서 해당 수가 없을 경우 출력하면 된다고 생각하였다. N이 20이므로 모든 경우의 수는 2^20 이며 대충 10^6 정도가 된다. 정답 코드#include using namespace std;typedef pair pii;typedef long long ll;#define endl "\n"#define MAX 1e11struct coordinate { int x; int y;};int dx[] = {0, 0, -1, 1, 1, -1, -1, 1};int dy[] = {-1.. 2025. 7. 12.
[백준] 2877번 4와 7 (C++) https://www.acmicpc.net/problem/2877   이 문제는 4와 7로 이루어진 수 중에 K번째 작은 수를 출력하라는 문제이다.  자릿수만 보았을때 2^n 만큼 증가하는 것을 알 수 있으며 임의의 수 k값을 주었을때2^n-1  또한 자릿수가 증가했을때 처음 시작 번호는 2^n-1이라는 것을 알 수 있으며 결국 4와 7을 이루는 수를 출력하라는 것은 비트마스킹으로도 표현할 수 있으며 (0일경우 4, 1일경우 7로) x = K - 2^n-1 인 수를 n-1이 0이 될때까지 왼쪽으로 밀고 or 연산 하여 x수와 tmp연산했을때 1인 경우 7 0인경우 4를 출력해주면 된다. #include using namespace std;typedef pair pii;typedef long long ll.. 2025. 4. 1.
[백준] 9997번 폰트 (C++) https://www.acmicpc.net/problem/9997  처음에 문제를 제대로 이해 못했다가 다른사람한테 물어봐서 문제가 이해가 됬던 문제이다. 결국 입력된 알파벳에 대한 조합을 모두 계산하여 만약 알파벳이 다 포함이 되었을 경우에 대한 조합의 개수를출력하는 문제이다.   dfs + 백트래킹 -> 시간초과#include using namespace std;typedef pair pii;typedef long long ll;#define endl "\n"int dx[] = {0,-1, 1, 0, 0, -1, -1, 1, 1};int dy[] = {0,0, 0, -1, 1, -1, 1, -1, 1};int N, result;int arr[26];bool visited[26];int status =.. 2025. 3. 30.
[백준] 1062번 가르침(C++) https://www.acmicpc.net/problem/1062   문제를 살펴보면 입력되는 단어는 anta로 시작하여 tica로 끝난다. 처음에 문제를 풀때 잘못이해하여 그냥 문자가 나올때 마다 그리디하게 접근하여 없는 단어를 읽을 수 없고 K개의 글자를가르친다고 했을때 없는 문자마다 읽을 수 있게 변경하였고 K가 없을 경우 못읽는걸로 출력을 하였다. 틀린 코드// baekjoon 17835#include using namespace std;typedef pair pii;typedef long long ll;#define endl "\n"#define INF int(1e9)int dx[9] = {-1, 1, 0, 0, -1, -1, 1, 1, 0};int dy[9] = {0, 0, -1, 1, -1,.. 2025. 2. 12.