일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 최소스패닝트리
- 코드그라운드
- Floyd-Warshall
- Ubuntu64bit
- 쉬운 계단 수
- 최소신장트리
- 다이나믹 프로그래밍
- 알고스팟
- 이친수
- 네이버 지도 api
- 축사 배정
- Mysql5.7
- 동적계획법
- 이분탐색
- 분할정복
- 백준
- pythonanywhere
- 알고리즘
- 피보나치수열
- 백트래킹
- 이분 매칭
- 이분매칭
- 세그먼트 트리
- Flpyd-Warshall
- SpringBoot
- tensorflow
- VituralBox
- 연속합
- 나무자르기
- 피노나치 수열
- Today
- Total
목록알고리즘 (38)
초보개발자
입력: 단어 S출력: a~z까지 S에 나타나는 처음 위치, 없으면 -1소스코드 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] alphabet = new int[26]; Arrays.fill(alphabet, -1); String str = sc.nextLine(); int sz = str.length(); for(int i=0; i
입력: 가로세로 크기 N, N*N 단지 정보(1: 아파트 있음 0: 없음) 출력: 단지의 개수와 오름차순으로 각 단지의 아파트 개수 출력알고리즘: BFS소스코드 import java.util.*; class pair{ int x, y; pair(int x, int y){ this.x = x; this.y = y; } } class Ascending implements Comparator{ @Override public int compare(Integer o1, Integer o2){ return o1.compareTo(o2); } } public class Main { static int[][] complex; static int[][] mov = new int[][] {{-1, 0},{0, -1},{1..
입력: 기다리는 사람 수 N, N개의 은행업무가 걸리는 시간 Ai출력: 최소 시간알고리즘: 그리디(탐욕법)소스코드1(우선순위 큐 이용) import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n; PriorityQueue wait = new PriorityQueue(); for(int i=0; i
입력: 테스트케이스 T, 가로 N, 세로 M, 배추가 심어져있는 개수 K, K개의 좌표 (x, y)출력: 최소 배추흰지렁이 마릿수알고리즘: DFS소스코드 import java.util.*; public class Main { static int n, m; static int[][] mov = new int[][] {{-1, 0},{0,-1},{1, 0},{0, 1}}; static int[][] map; public static void dfs(int x, int y){ map[x][y] = 0; for(int i=0; i= n || mY = m) continue; if(map[mX][mY] != 1) continue; dfs(mX, mY); } } public static void ..
입력: 방의 개수 N, N개의 방에 들어가는 응시자수 Ai, 총감독관이 볼 수 있는 사람 수 B, 부감독관이 볼수 있는 사람 수 C출력: 시험을 치기 위한 감독관이 수소스코드 #include #include using namespace std; int main() { int n, b, c; scanf("%d", &n); vector room(n); for(int i=0; i
입력: 가로 R, 세로 C, 로봇청소기의 위치(x, y), 방향(0:북쪽, 1: 동쪽, 2: 남쪽, 3: 서쪽) RxC 지도(1: 벽, 0: 청소)출력: 로봇이 청소하는 공간의 개수소스코드 #include using namespace std; bool clean[50][50] = { false, }; int map[50][50]; int mov[4][2] = { {0, -1}, {-1, 0}, {0, 1},{1, 0} }; void dfs(int x, int y, int& rooms, int dir, const int r, const int c) { if(!clean[x][y]) rooms++; clean[x][y] = true; int mX, mY, see = dir; for (int i = 0; i ..
입력: 일수 N, N개의 걸리는 일과 금액출력: 최대 금액알고리즘: 동적계획법, Knapsack 알고리즘소스코드 #define _CRT_SECURE_NO_WARNINGS #include #include #include #define plan pair #define mp(x, y) make_pair(x, y) using namespace std; vector cache; vector schedule; int benefit(int idx, int n) { if (idx >= n) return 0; int& ret = cache[idx]; if (ret != -1) return ret; ret = max(benefit(idx + 1, n), ret); if (idx + schedule[idx].first
트리 순회에는 세 가지 방법이 있다. 전위순회(preorder), 중위순회(inorder), 후위순회(postorder) 어떻게 분류하는 거냐면 언제 부모의 Value를 방문하는 순간으로 분류한다. 즉, 아래와 같다. 전위순회: 부모 - left - right 중위순회: left - 부모 - right 후위순회: left - right - 부모 만약 value를 출력하거나 임의의 함수를 호출한다면 저 순서대로 출력하면 된다. 예를 들면 노드에 문자를 저장해놓고 중위순회하는 코드는 아래와 같다. void inorder(int node, const int n) { if (node > n) return; inorder(node * 2, n); printf("%c", tree[node]); inorder(nod..
입력: 테스트케이스 T, 가로세로 길이 N, (i, j)를 복구하는 데 드는 비용 N*N출력: (0, 0) => (n - 1, n - 1) 가는 복구 최솟값알고리즘: 다익스트라소스코드 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include using namespace std; #define fee pair #define mp(x, y) make_pair(x, y) #define pointX(fee) fee.second.first #define pointY(fee) fee.second.second string map[100]; int mov[4][2] = { {1, 0}, {0, 1}, {-1, 0}, {0,..
입력: 테스트케이스 T, 응시자 N명, N개의 최종 라운드 전 까지의 종합점수출력: 최종 우승할 가능성이 있는 응시자의 수소스코드 #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; int main() { int testcase, n; scanf("%d", &testcase); vector finalScore(300000); for (int t = 1; t max) max = temp; } for (int i = 0; i = max) winner++; } printf("Case #%d\n%d\n", t, winner); } return 0; }