> >
본문 바로가기

Algorithm/BOJ

(27)
[BOJ] 14267번 회사 문화 1 Sol1) 트리 DP상사가 직속 부하를 칭찬하면 그 부하가 부하의 직속 부하를 연쇄적으로 칭찬하는 내리 칭찬이 있다. 그래프로 간선을 연결해주면 간단하게 트리 DP를 이용해먹을 수 있겠다고 생각했다. for (int i = 0; i DFS를 돌기 전에 반영을 해줘야 계속해서 자식 노드에 전달할 수 있다. 소스 코드#include #define FASTIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)using namespace std;#define ll long longconst int MAXN = 100005;ll dp[MAXN], arr[MAXN];vector trees[MAXN];bool visited[MAXN];void dfs(int cur){ ..
[BOJ] 1337번 올바른 배열 Sol1) 자료구조50개의 원소를 set에 넣고 원소 it에 대하여 [it + 1, it + 4]의 개수가 몇 개인지 확인합니다. 소스 코드#include #define FASTIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)using namespace std;int main(){ FASTIO; int n, num, res = 4; set s; cin >> n; for (int i = 0; i > num; s.insert(num); } for (auto it : s){ int tmp = 0; for (int i = it + 1; i
[BOJ] 2213번 트리의 독립집합 Sol1) Tree DP트리의 독립집합 크기1. dp[cur][1] = sum(dp[next][0]) + arr[cur]-> 1은 집합에 선택되었음을 표현 합니다. next는 모두 선택되지 않아야 합니다.2. dp[cur][0] = sum(max(dp[next][0], dp[next][1]))-> cur이 선택되지 않으면 next는 선택하거나 안하거나 상관없습니다.  독립집합의 정점vector res[MAXN][2]를 선언해서 next의 정점들을 cur로 올려줍니다. cur이 선택되지 않는 독립집합의 경우 두 가지로 나눠서 next가 선택되었을 때랑 안되었을 때 구분합니다. 소스 코드#include #define FASTIO ios::sync_with_stdio(0), cin.tie(0), cout.ti..
[BOJ] 1477번 휴게소 세우기 문제 풀이얼마 전까지 이분 탐색 문제에서 조건을 어떻게 써야하는지 어떤 것을 출력해야 하는지 헷갈릴 때가 있었습니다. 보통 처음 배우는 이분 탐색의 식은 특정 조건을 만족할 때 while문을 탈출하는 식이라서 더 그랬던 것 같습니다. 동기들과 알고리즘 스터디를 진행하면서 이분 탐색이 좀 명확하게 보이기 시작했고 여러분과 나누고자 합니다. 1. 이분 탐색의 변수를 어떤 것으로 할 것인가?-> 사실 이 질문에서 이분 탐색인지 몰랐던 문제가 갑자기 명확해지는 경우가 많습니다. 이 문제의 경우 고속도로 길이를 이분 탐색의 변수로 둡니다. 보통 문제에서 구하라고 명시되어 있는 것이긴 합니다.2. True -> False 혹은 False -> True-> 이분 탐색이 헷갈려서 구글에 치면 가장 먼저 나오는 백준의 ..
[BOJ] 15685번 드래곤 커브 Sol1) 방향을 기준으로 string 만들기#include #define FASTIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)using namespace std;int n, x, y, d, g, res;bool visited[105][1005];int dx[] = {1, 0, -1, 0};int dy[] = {0, -1, 0, 1};int main(){ FASTIO; cin >> n; for (int i = 0; i > x >> y >> d >> g; string tmp = to_string(d); for (int j = 0; j  시계 방향으로 90도를 돌린다는 것은 기준점의 관점에서는 반시계..
[BOJ] 14890번 경사로 Sol1) 재귀#include #define FASTIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)using namespace std;const int MAXN = 105;int n, l, res;int a[MAXN][MAXN], b[MAXN][MAXN];void solved(int arr[MAXN][MAXN], int i, int j, int cnt){ if (j == n) { res++; return; } int cur = arr[i][j]; int next = arr[i][j + 1]; if (cur == next) solved(arr, i, j + 1, cnt + 1); else i..
[BOJ] 14499번 주사위 굴리기 #include #define FASTIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)using namespace std;const int MAXN = 25;int n, m, x, y, k, dir;int arr[MAXN][MAXN], state[6];int dx[] = {0, 0, -1, 1}; // 동서북남 순서int dy[] = {1, -1, 0, 0};bool out_boundary(){ int nx = x + dx[dir]; int ny = y + dy[dir]; return !(nx >= 0 && nx = 0 && ny 0; i--) state[i] = state[i - 1]; state[0] = tm..
[BOJ] 14891번 톱니바퀴 #include #define FASTIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)using namespace std;int k, n, dir, res, cnt = 1;string s[5];bool flag[5];void rev (int idx, int d){ if (d == 1){ int tmp = s[idx][7]; for (int i = 7; i > 0; i--) s[idx][i] = s[idx][i - 1]; s[idx][0] = tmp; } else{ int tmp = s[idx][0]; for (int i = 1; i > s[i]; cin >> ..