본문 바로가기

Study

(52)
백준 14225 부분수열의 합 https://boj.kr/14225 14225번: 부분수열의 합 수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 www.acmicpc.net 비트마스크로 풀었다. 수열의 길이만큼 비트 개수를 정하고 모든 경우의 수를 비트가 꺼져있는지 켜져있는지 확인해서 그 합을 구해서 풀었다. set 자료구조를 사용해서 1부터 (수열에 있는 모든 합 + 1 ) 까지 수를 넣어주고 비트가 켜져있는 수의 합을 빼주면서 값을 구했다. 왜 수열에 있는 모든 합 +1 이냐면 가장 작은 자연수를 구할 때 수열의 모든 합보다 ..
[백준] 1260. DFS와 BFS https://www.acmicpc.net/problem/1260 문제설명 dfs와 bfs 를 구현하여 방문 노드 순서대로 노드 값을 출력하는 것이다. 입력 4 5 1 1 2 1 3 1 4 2 4 3 4 출력 1 2 4 3 1 2 3 4 나의 사고과정 사고과정은 없다. 외울정도로 많이 해봤던 것이다. 소스코드 C++ #include #include #include using namespace std; int n, m, start; int tree[1001][1001] = {0,}; int visit[1001] = {0,}; void dfs(int v) { visit[v] = 1; printf("%d ", v); for (int i = 1; i
[백준] 2630. 색종이 만들기 안녕하세요. 이번에는 백준의 단계별로 풀어보기 중 분할정복의 '색종이 만들기'를 풀어보겠습니다. 문제설명 https://www.acmicpc.net/problem/2630 전형적인 분할정복문제이다. 입력 8 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 출력 9 7 나의 사고과정 예전에 이런것을 풀어봤었다! 제일 큰 종이에서 모든 부분이 같은지 확인하고 만약 아니라면 4부분으로 나눠서 똑같이 확인한다. 모두 같은 부분이 나오면 해당 색깔의 종이 수를 세준다. 소스코드 C++ #include #include const int ..
[백준] 1021 회전하는 큐 #include const int q_length = 100; class deque { public: int arr[q_length]; int front = 0; int back = 0; int addmod(int v) { return (v+1) % q_length; } int submod(int v) { return (v-1+q_length) % q_length; } void push_back(int v) { arr[back] = v; back = addmod(back); } void push_front(int v) { front = submod(front); arr[front] = v; } void front_pop() { front = addmod(front); } // op 1 void back_..
[백준] 10866 덱 #include const int op_length = 11; const int d_length = 10004; class deque{ public: int arr[d_length]; unsigned int front = 0; unsigned int back = 0; void push_back(int v) { arr[back] = v; back = (back + 1) % d_length; } void push_front(int v) { front = (front + d_length-1) % d_length; arr[front] = v; } void pop_front() { if (empty()) { printf("-1\n"); } else { printf("%d\n", arr[front]); front ..
[백준] 1966 프린터 큐 #include const int q_length = 101; class item { public: int priority; bool isTarget; }; class printer_queue { public: item arr[q_length]; int front = 0; int back = 0; void push_back(item v) { arr[back] = v; back = (back+1) % q_length; } void pop() { front = (front+1) % q_length; } bool is_empty() { return front == back; } void print_target() { int count = 0; while (!is_empty()) { item c = arr[fr..
[백준] 11866 요세푸스 문제0 c++ #include #include using namespace std; int main() { int k, n; scanf("%d %d", &n, &k); queue q; for (int i = 0; i < n; ++i) { q.push(i+1); } printf(""); }
[백준] 2164 카드2 #include #include using namespace std; int main() { int n; scanf("%d", &n); queue q; for (int i = 0 ; i < n; i++) { q.push(i+1); } while (q.size() != 1) { q.pop(); q.push(q.front()); q.pop(); } printf("%d\n", q.front()); }