일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- BFS
- 검색트리
- codecademy
- 클린코드
- Web
- DP
- SQL
- java
- SWEA
- 자바
- front-end
- 다이나믹 프로그래밍
- Spring
- 프로그래머스
- 해슁
- android
- inflearn
- CSS
- DFS
- algorithm
- javascript
- 구현
- Color
- 정렬
- html
- CleanCode
- Kotlin
- 순환
- 코딩테스트
- Today
- Total
깡뇽
[백준] 21610번 마법사 상어와 비바라기 파이썬 본문
비바라기 마법 -> NxN 격자에서 연습
격자의 칸에는 바구니가 하나 있고, 바구니는 칸 전체를 차지함.
바구니에 저장할 수 있는 물의 양에는 제한 없음.
(r, c)는 격자의 r행 c열에 있는 바구니를 의미.
A[r][c]는 (r, c)에 있는 바구니에 저장되어 있는 물의 양을 의미.
격자의 가장 왼쪽 윗 칸 (1, 1)
가장 오른쪽 아랫 칸 (N, N)
연습을 위해 1번 행과 N번 행을 연결. 1번 열과 N번열 연결.
즉, N번 행의 아래에는 1번 행이, 1번 행의 위에는 N번 행이 있고, 1번 열의 왼쪽에는 N번 열이, N번 열의 오른쪽에는 1번 열이 있음.
비바라기 시전 -> (N, 1), (N, 2), (N-1, 1), (N-1, 2)에 비구름 생성
구름 이동 M번 명령 -> i번째 이동 명령은 방향 di / 거리 si
총 8 방향(←, ↖, ↑, ↗, →, ↘, ↓, ↙)
<이동 명령>
1. 모든 구름이 di 방향으로 si칸 이동한다.
2. 각 구름에서 비가 내려 구름이 있는 칸의 바구니에 저장된 물의 양이 1 증가한다.
3. 구름이 모두 사라진다.
4. 2에서 물이 증가한 칸 (r, c)에 물복사버그 마법을 시전한다. 물복사버그 마법을 사용하면, 대각선 방향으로 거리가 1인 칸에 물이 있는 바구니의 수만큼 (r, c)에 있는 바구니의 물이 양이 증가한다.
- 이때는 이동과 다르게 경계를 넘어가는 칸은 대각선 방향으로 거리가 1인 칸이 아니다.
- 예를 들어, (N, 2)에서 인접한 대각선 칸은 (N-1, 1), (N-1, 3)이고, (N, N)에서 인접한 대각선 칸은 (N-1, N-1)뿐이다.
5. 바구니에 저장된 물의 양이 2 이상인 모든 칸에 구름이 생기고, 물의 양이 2 줄어든다. 이때 구름이 생기는 칸은 3에서 구름이 사라진 칸이 아니어야 한다.
- 입력
1줄 : N, M
2~N줄 : N개의 정수 (r번째 행의 c번째 정수 == A[r][c])
M줄 : 이동의 정보 di, si
- 출력
M번의 이동이 모두 끝난 후 바구니에 들어있는 물의 양의 합
21610번 마법사 상어와 비바라기
출처 : https://www.acmicpc.net/problem/21610
'Algorithm > BAEKJOON' 카테고리의 다른 글
[백준] 15685번 드래곤 커브 파이썬 (0) | 2022.10.05 |
---|---|
[백준] 15686번 치킨 배달 파이썬 (1) | 2022.10.04 |
[백준] 20055번 컨베이어 벨트 위의 로봇 파이썬 (1) | 2022.10.04 |
[백준] 14891번 톱니바퀴 파이썬 (1) | 2022.10.04 |
[백준] 14503번 로봇 청소기 파이썬 (1) | 2022.10.04 |