일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 다이나믹 프로그래밍
- 연속합
- SpringBoot
- 코드그라운드
- 세그먼트 트리
- 백준
- 알고리즘
- tensorflow
- 최소스패닝트리
- 네이버 지도 api
- pythonanywhere
- 분할정복
- 피노나치 수열
- 피보나치수열
- VituralBox
- 이친수
- 이분탐색
- 나무자르기
- 백트래킹
- 최소신장트리
- 동적계획법
- 쉬운 계단 수
- 알고스팟
- Floyd-Warshall
- Flpyd-Warshall
- 축사 배정
- 이분 매칭
- Ubuntu64bit
- 이분매칭
- Mysql5.7
- Today
- Total
목록백준 (28)
초보개발자
입력: 조규현 좌표와 류재명과의 거리(x1, x2, r1), 백승환의 좌표와 류재명과의 거리(x2, y2, r2) (-10,000 ≤ x1,y1,x2,y2 ≤ 10,000 정수, r1,r2 ≤ 10,000 자연수)출력: 류재명의 좌표가 될 수 있는 좌표의 경우의 수. 만약 무한대라면 -1소스코드 #define _CRT_SECURE_NO_WARNINGS #include #include using namespace std; int main() { int t; scanf("%d", &t); while (t--) { int x1, y1, x2, y2, r1, r2; scanf("%d%d%d%d%d%d", &x1, &y1, &r1, &x2, &y2, &r2); double d = sqrt((x1 - x2)*(x1..
입력: 테스트 케이스 T 구하고자 하는 숫자 N출력: 1, 2, 3으로 이용하여 표현할 수 있는 경우의 수 예: 4를 표현한다고 하면 아래와 같은 경우의 수가 있다1+1+1+1 / 1+1+2 / 1+2+1 / 2+1+1 / 2+2 / 1+3 / 3+1알고리즘: 동적계획법, 피보나치 수열소스코드 #define _CRT_SECURE_NO_WARNINGS #include #include using namespace std; int main() { int n, t; scanf("%d", &t); vector dp(12, -1); dp[1] = 1; dp[2] = 2; dp[3] = 4; for (int i = 4; i
입력: 수빈이 위치 N 수빈이 동생 위치 K 100,000이하의 자연수출력: 수빈이가 동생을 찾기 위해 걸리는 최소 시간조건: 수빈이는 현재 자리에서 한 칸 앞으로 가거나 뒤로 갈 수 있으며 두 배로 이동할 수 있다.알고리즘: BFS소스코드 #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; #define MAX 100000 #define min(a, b) (a < b ? a : b) int main() { int n, k; scanf("%d%d", &n, &k); vector step(MAX + 1, MAX + 1); step[n] = 0; queue time; time.push(n); while (!time.e..
입력: 나무 개수 N, 총 자르려는 나무의 합 M, N개의 나무 길이출력: 적어도 M 길이의 나무를 자를 수 있는 최댓값알고리즘: 이분법, 이분탐색소스코드 #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; typedef long long ll; int main() { int N, M; scanf("%d%d", &N, &M); vector tree(N); for (int i = 0; i 1) { mid =..
입력: 세로N 가로M 미로지도(1: 갈 수 있는 곳 0: 갈 수 없는 곳)출력: (1, 1)에서 (N, M)까지 가는 최소 칸 수알고리즘: BFS소스코드 #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; int main() { int n, m; scanf("%d%d", &n, &m); int maze[100][100]; bool visited[100][100]; for (int i = 0; i < n; i++) for(int j=0; j 0 && (maze[x - 1][y] == 1)) { maze[x - 1][y] = maze[x][y] + 1; road.push((x - 1) * 100 + y); } if (..
입력: 집의 개수 N, 각 집을 색칠하는 데 드는 비용. 순서대로 Red, Green, Blue출력: 모든 집을 색칠하는데 드는 최소비용조건: 이웃한 집은 서로 색이 같을 수 없다.알고리즘: 동적계획법소스코드 #define _CRT_SECURE_NO_WARNINGS #include #include using namespace std; #define min(a, b) (a < b ? a : b) #define MAX 987654321 vector dp; vector house; int n; int coloring(int, int); int main() { scanf("%d", &n); house = vector(n, vector(3)); dp = vector(n, vector(3, -1)); for (in..
입력: 가로 길이 n(1,000 이하의 자연수)출력: 2xn을 2x1 타일들로 표현할 수 있는 경우의 수를 10,007로 나눈 것알고리즘: 동적계획법, 피보나치 수열소스코드 #define _CRT_SECURE_NO_WARNINGS #include #include using namespace std; vector dp(1001, -1); int fibonacci(int n) { if (n == 0) return 1; else if (n == 1) return 1; else if (dp[n] != -1) return dp[n]; else return dp[n] = (fibonacci(n - 1) + fibonacci(n - 2) ) % 10007; } int main() { int n, t; scanf("%..
입력: 자릿수 N출력: 자릿수 N의 계단수 개수계단 수란 45656 처럼 인접한 모든 수가 1차이가 나는 수이다알고리즘: 동적계획법소스코드 #define _CRT_SECURE_NO_WARNINGS #include #include using namespace std; int main() { int n; scanf("%d", &n); vector stair(n, vector(10, 0)); //한 자릿수 초기화 for (int i = 0; i < 10; i++) stair[0][i] = 1; for (int i = 1; i < n; i++) { for (int j = 0; j < 10; j++) { if (j != 9) stair[i][j] = stair[i - 1][j + 1] ; if (j != 0) s..
입력: 도시 수 N 버스 수 M 출발 도시와 도착 도시 (u,v) 버스 비용 c출력: 모든 도시 쌍을 이동하는 데 드는 최소 비용알고리즘: Floyd-Warshall소스코드 #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; #define INT_MAX 100*100*1000 + 1 int min(int a, int b) { return (a < b ? a : b); } int main() { int n, m, u, v, c; scanf("%d %d", &n, &m); vector adj(n + 1, vector(n + 1, INT_MAX)); for (int i = 1; i
입력: 정점의 개수 N, N X N 인접행렬출력: transitive closure 인접행렬알고리즘: Floyd-Warshall소스코드 #define _CRT_SECURE_NO_WARNINGS #include #include using namespace std; int main() { int n, u; scanf("%d", &n); vector adj(n, vector(n)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%d", &adj[i][j]); } } for (int k = 0; k < n; k++) { for (int i = 0; i < n; i++) { if (i == k) continue; for (int j = 0..