일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- 구현
- 백트래킹
- CS
- 수학
- mst
- Effective Java
- 후니의 쉽게 쓴 시스코 네트워킹
- BFS
- 그리디
- dfs
- 플로이드-와샬
- 위상정렬
- 에라토스테네스의 체
- java
- 스택
- 완전탐색
- 유니온 파인드
- JUnit 5
- Kotlin
- swea
- 동적계획법
- 프로그래머스
- 문자열
- 시뮬레이션
- 알고리즘
- 세그먼트 트리
- 이분탐색
- 투 포인터
- Network
목록시뮬레이션 (35)
반갑습니다!
18428번: 감시 피하기 www.acmicpc.net 풀이 순열을 구현해서 3개의 장애물을 설치하고 감시를 피할 수 있는지 확인해주면 된다. c++에서는 DFS를 통해 순열을 구현했고, Python3에서는 combinations() 함수를 사용해서 구현했다. 코드 #include #include using namespace std; int n, answer; const int dx[] = { -1, 0, 1, 0 }, dy[] = { 0, -1, 0, 1 }; vector cand, teachers; char board[6][6]; // 감시 피할 수 있는지 체크하는 함수 int check() { for (pair t : teachers) { for (int i = 0; i < 4; i++) { int..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 시뮬레이션 문제이다. 구조물을 추가하거나 제거해도 문제에 주어진 규칙을 만족시켜야 한다. 아래의 코드에서는 구조물을 추가하거나 제거할 때마다 모든 구조물들이 규칙을 만족시키는지 확인했다. 그렇게 함으로써 구조물을 추가하거나 제거하는 로직이 간단해진다. 구조물을 추가할 때는 우선 구조물을 추가했을 때 모든 구조물들이 규칙을 만족시키지 못한다면 구조물을 제거하면 되고, 반대로 구조물을 제거할 때는 일단 구조물을 제거하고 모든 구조물이 규칙을 만족하지 못한다면 다시 구조물을 추가하면 된다. 구조물의 설치 여부..
풀이 규칙을 찾아서 해결하는 문제이다. 규칙은 생각보다 잘 보이지 않는데, 드래곤 커브의 움직임을 화살표로 표현해서 생각해보자. 0세대 드래곤 커브는 → 으로 표현할 수 있다. 그리고 1세대 드래곤 커브는 → ↑ 이다. 마찬가지 방식으로 표현하면 2세대 드래곤 커브는 → ↑ ← ↑ 이 된다. 마지막으로 3세대 드래곤 커브는 → ↑ ← ↑ ← ↓ ← ↑ 로 표현된다. 규칙은 직전 세대의 드래곤 커브의 뒤에서부터 반시계 방향으로 90도 회전시켜주면 된다. 위의 그림과 같은 방식으로 N-1 세대를 알고 있다면 N 세대를 유추할 수 있다. 따라서 규칙에 맞게 드래곤 커브들을 모두 그려준 뒤, 1x1 크기의 정사각형의 개수를 세어주면 된다. 코드 #include #include using namespace std..
15683번: 감시 www.acmicpc.net 풀이 완전 탐색으로 해결할 수 있는 문제이다. dfs를 통해 모든 CCTV의 방향을 결정해주고 감시할 수 있는 최소값을 구하면 된다. CCTV가 감시하는 구현해보자. void observe(int x, int y, int dir) { int nx = x; int ny = y; while (true) { nx += dx[dir]; ny += dy[dir]; if (nx m - 1 || ny n - 1 || tmp[ny][nx] == 6) break; if (tmp[ny][nx] != 0) continue; tmp[ny][nx] = -1; } } 우선 1번 CCTV와 동일한 방법으로 감시할 수 있도록 함수를 구현하였다..
14891번: 톱니바퀴 www.acmicpc.net 풀이 시뮬레이션 문제이다. 문제에 나온대로 구현하면 어렵지않게 해결할 수 있다. 구현을 쉽게 하기 위해서 반시계방향은 -1이 아닌 0으로 바꿔주었고, 톱니바퀴의 번호를 1씩 감소시켜 구현하였다. 코드 #include using namespace std; int k; int w[4][8]; int get_score() { int ret = 0; for (int i = 0; i < 4; i++) if (w[i][0]) ret += (1 = 1; i--) w[idx][i] = w[idx][i - 1]; w[idx][0] = tmp; } else { int tmp = w[idx][0]; for (int i = 0; i < 7; i++) w[idx][i] = w..