일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- mst
- 수학
- 투 포인터
- 프로그래머스
- 완전탐색
- 알고리즘
- Kotlin
- 유니온 파인드
- 후니의 쉽게 쓴 시스코 네트워킹
- BFS
- 스택
- 에라토스테네스의 체
- Network
- 구현
- java
- 시뮬레이션
- 백준
- swea
- 플로이드-와샬
- 동적계획법
- 세그먼트 트리
- 위상정렬
- 백트래킹
- CS
- dfs
- 이분탐색
- Effective Java
- JUnit 5
- 그리디
- 문자열
목록전체 글 (291)
반갑습니다!
13265번: 색칠하기 www.acmicpc.net 풀이 DFS를 통해 탐색하면서 색칠이 가능한지 확인하면 된다. 색칠하는 부분에서 1과 2로 색을 구분하였기 때문에 circle[i] = 3 - circle[idx]로 다른 색깔로 색칠해주었다. 코드 #include #include using namespace std; int n, m; bool is_possible; vector circle; vector line; void dfs(int idx) { for (auto i : line[idx]) { if (!circle[i]) { circle[i] = 3 - circle[idx]; dfs(i); } if (circle[idx] == circle[i]) is_possible = false; } } int ..
13460번: 구슬 탈출 2 www.acmicpc.net 풀이 BFS를 사용하여 해결할 수 있는 문제이다. 이 때 신경써야 할 좌표가 빨간공의 x, y좌표와 파란공의 x, y좌표로 총 4개이다. 따라서 중복체크를 위한 배열을 visited[red.y][red.x][blue.y][blue.x]로 4차원으로 선언하여 해결하였다. ## #include #include using namespace std; struct Ball { int x, y; }; int n, m; char map[10][11]; bool visited[10][10][10][10]; Ball red, blue; const int dx[] = { -1, 0, 1, 0 }, dy[] = { 0, -1, 0, 1 }; int bfs() { qu..
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 풀이 사다리 구현만 잘 하면 쉽게 해결할 수 있다. 코드 #include #include using namespace std; int radder[100][100]; vector start; bool can_finish(int pos) { int y = 0; int x = pos; // 맨 사다리 맨 아래까지 이동 while (y < 99) { // 오른쪽으로 이동이 불가능할 때까지 이동 if (x < 99 && radder[y][x + 1] == 1) while (x < 99 && radder[y][x + 1] == 1) x++; // 왼쪽으로 이동이 불가능할 ..
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 상당히 어려운 문제이다. 아이디어를 생각하는게 어려웠다... 풀이 방은 기본적으로 홀수 방은 위쪽에, 짝수 방은 아래쪽에 배치되어있다. 같은 열에 있는 두 방은 동일 선상으로이라고 볼 수 있으므로 400개의 방을 200개의 방으로 줄여서 생각할 수 있다. 예를 들어, 1번 방에 있던 학생은 4번 방으로, 5번 방에 있던 학생은 6번 방으로 이동해야하는 상황이라고 해보자. 8개였던 방을 4개의 방으로 줄여서 표현해보면 아래의 그림과 같다고 할 수 있다. 그렇다면 이제 배열을 만들어 각 학생들을 옮겨보자. for (int j = a; j > t; for (int c ..
15971번: 두 로봇 www.acmicpc.net 풀이 두 로봇을 양 시작점과 끝점이라고 생각하면, 시작점부터 끝점까지의 길이의 합에서 가장 긴 길이를 빼면 된다. 코드 #include #include #include using namespace std; bool finish = false; int n, r1, r2; vector adj[100001]; bool visited[100001]; void dfs(int idx, int sum, int max_value){ // 답을 찾았으면 탐색을 종료 if (finish) return; // 경로를 다 찾은 경우 if (idx == r2) { finish = true; cout n >> r1 >> r2; for (int i = 0; i < n - 1; i..