필요/코딩테스트(백준)(49)
-
[백준/C++]#14719- 빗물
코드1 // BOJ #14719 #include using namespace std; // 2차원 블록 세상 bool block[501][501]; int main() { ios::sync_with_stdio(0); cin.tie(0); int H, W, inp; cin >> H >> W; for (int i=1; i> inp; // 해당 열의 맨 아랫줄부터 블록의 크기만큼 채움 for (int j=H; j>H-inp; j--) { block[j][i] = 1; } } // 한 줄에 존재하는 블록 저장용 큐 queue q; // 빗물의 양 int sum=0; for (int i=1; i
2022.08.25 -
[백준/C++]#1106- 호텔
코드1 #include using namespace std; int C, N; // 비용 int cost[21]; // 고객의 수 int human[21]; // Dp의 크기 int D[1101]; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> C >> N; int inp1, inp2; // 절대 나올 수 없는 값으로 초기화 fill(D, D+1101, 10000000); int maxi = INT_MIN; for (int i=0; i> inp1 >> inp2; // 가장 큰 고객의 수 maxi = max(maxi, inp2); cost[i] = inp1; human[i] = inp2; // 해당 고객에 대해 가장 작은 비용의 값이 저장됨 D[hum..
2022.08.24 -
[백준/C++]#1174, 1038- 줄어드는 수, 감소하는 수
코드 #include #define ll long long using namespace std; vector v; void fun(int val, ll adder) { v.push_back(adder); for (int i=val-1; i>=0; i--) { fun(i, adder*10+i); } } int main() { ios::sync_with_stdio(0); cin.tie(0); for (int i=0; i> N; cout
2022.08.21 -
[백준/C++]#13910, 13902- 개업, 개업2
코드 #include using namespace std; // 웍 넣는 배열 int arr[101]; // Dp 저장 배열 int D[20001]; int main() { ios::sync_with_stdio(0); cin.tie(0); int N, M; cin >> N >> M; for (int i=0; i> arr[i]; // Dp 최댓값으로 초기화 fill(D, D+20001, INT_MAX); // 한번의 요리에 해당하는 DP 채움 (1개의 웍 크기, 2개의 웍 크기) for (int i=0; i
2022.08.18 -
[백준/C++]#1654 - 랜선 자르기
풀이 #include #define ll long long using namespace std; // 이미 가지고 있는 랜선 ll L[10001]; int main() { ios::sync_with_stdio(0); cin.tie(0); int K,N; cin >> K >> N; // 가지고 있는 랜선 중 가장 큰 것 (모든 경우 고려하기 위해) ll maxi = INT_MIN; for (int i=0; i> L[i]; maxi = max(maxi, L[i]); } ll st=1; ll en=maxi; ll ans; // 이진탐색 while (st
2022.08.15 -
[백준/C++]#1967 - 트리의 지름
풀이 #include #include #include #include using namespace std; struct Edge { int to; int cost; Edge(int to, int cost) : to(to), cost(cost) {} }; vector A[10001]; bool check[10001]; int dist[10001]; void bfs(int start) { memset(dist, 0, sizeof(dist)); memset(check, false, sizeof(check)); check[start] = true; queue q; q.push(start); while (!q.empty()) { int x = q.front(); q.pop(); for (int i=0; i> n;..
2021.02.19 -
[백준/C++]#1167 - 트리의 지름
풀이 #include #include #include #include using namespace std; struct Edge { int to; int cost; Edge(int to, int cost) : to(to), cost(cost) {} }; int n; vector A[100001]; bool check[100001]; int dist[100001]; void bfs(int start) { memset(dist, 0, sizeof(dist)); memset(check, false, sizeof(check)); queue q; check[start] = true; q.push(start); while (!q.empty()) { int x = q.front(); q.pop(); for (int ..
2021.02.18 -
[백준/C++]#11725 - 트리의 부모 찾기
풀이 #include #include #include using namespace std; vector a[100001]; bool check[100001]; int parent[100001]; int main() { int n; cin >> n; queue q; for (int i=0; i> u >> v; a[u].push_back(v); a[v].push_back(u); } check[1] = true; parent[1] = 0; q.push(1);// 루트인 1부터 dfs 시작 while (!q.empty()) { int x = q.front(); q.pop(); for (int y : a[x]) { if (check[y] == false) { check[y] = true; parent[y] = x..
2021.02.17 -
[백준/C++]#1991 - 트리 순회
풀이 #include using namespace std; int a[50][2]; void preorder (int N) { if (N == -1) return; cout x >> y >> z;// 알파벳 입력 x = x-'A';// 문자 -> 숫자 변환 if (y == '.') {// 입력이 .이면 그 자리에 -1 대입 a[x][0] = -1; } else { a[x][0] = y-'A'; } if(z == '.') { a[x][1] = -1; } else { a[x][1] = z-'A'; } } preorder(0); cout 오른쪽 중위 : 왼쪽->노드->오른쪽 후위 : 왼쪽->오른쪽->노드 덩어리처럼(서브트리) 생각해서 접근하면 순회 순서를 생각하기가 쉬워진다. 문자를 숫자로, 숫자를 문자로 바..
2021.02.16