일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- dfs
- 백준
- 플로이드-와샬
- Kotlin
- 프로그래머스
- Effective Java
- CS
- BFS
- java
- 스택
- JUnit 5
- 위상정렬
- mst
- 수학
- 투 포인터
- 유니온 파인드
- Network
- 이분탐색
- swea
- 완전탐색
- 세그먼트 트리
- 문자열
- 그리디
- 후니의 쉽게 쓴 시스코 네트워킹
- 동적계획법
- 에라토스테네스의 체
- 구현
- 백트래킹
- 알고리즘
- 시뮬레이션
목록시뮬레이션 (35)
반갑습니다!
16985번: Maaaaaaaaaze www.acmicpc.net 풀이 구현이 까다로운 문제이다. 이 문제는 완전탐색으로 해결하였다. 이 문제는 크게 세가지의 구현을 해내면 풀 수 있다. 1. 5x5 크기의 판 쌓기 (Permutation) 2. 5x5 크기의 판 돌리기 3. 3차원 최단 경로 찾기 (BFS) 우선 5x5 크기의 판 쌓기는 순열을 사용해서 간단히 구현할 수 있다. 각 판의높이를 나타내는 숫자 배열 h = \[0, 1, 2, 3, 4\]가 있다고 하자. h 배열의 숫자를 정렬하는 방법은 [0, 1, 2, 3, 4]부터 [4, 3, 2, 1, 0]까지 총 120가지의 경우가 나온다. 따라서 이를 이용하면 판을 쌓는 모든 경우를 쉽게 구현할 수 있다. 이번엔 5x5 크기의 판 돌리기를 알아보자..
3190번: 뱀 www.acmicpc.net 풀이 일반적으로 생각하는 스네이크 게임과 달리 이 문제에서는 머리를 이동시키고 나서 사과가 없으면 꼬리를 지우므로 이 부분을 유의해서 종료조건을 생각해야한다. 구현하기 편하게 하기 위해서 사과는 좌표값을 키로 하여 set에 저장하였고, 뱀의 몸통은 list에 저장해서 구현하였다. 그리고 방향은 시간을 키로 하여 map에 저장하여 구현하였다. 코드 #include #include #include #include using namespace std; int n, k, l; int sx = 1, sy = 1, dir = 0; list snake; set apple; map cmd; const int dx[] = { 1, 0, -1, 0 }, dy[] = { 0, 1..
12100번: 2048 (Easy) www.acmicpc.net 풀이 블록의 움직임을 구현하고, 완전탐색으로 모든 경우를 시도해보면 되는 문제이다. 이 문제의 포인트는 블럭을 이동시키는 것과 완전탐색을 구현하는 것이다. 블럭을 이동시키는 것은 상하좌우 4방향을 구현해야하는데, 한 방향을 구현해두면 보드를 회전시켜 다른 방향을 쉽게 구현할 수 있다. void rotate_board() { vector tmp = board; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) board[i][j] = tmp[n - 1 - j][i]; } 보드를 시계방향으로 90도 회전하는 함수는 위와 같은데, 알아두면 유용하니 숙지하기를 추천한다. 보드를 회전시키는 함수를 구..
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++; // 왼쪽으로 이동이 불가능할 ..