일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Naver boostcourse
- Naver boostcamp
- 풀스택
- cs50
- 웹
- sts
- 프로그래머스
- Django
- AI Tech 4기
- 파이썬
- 4기
- 서블릿
- P Stage
- boostcourse
- 장고
- 부스트캠프
- 백준
- 프로그래밍
- 네이버
- 레벨2
- 대회
- QNA 봇
- 2021 Dev-matching 웹 백엔드 개발자
- AI Tech
- Customer service 구현
- 서버
- 구현
- 백엔드
- 웹 프로그래밍
- BOJ
Archives
- Today
- Total
daniel7481의 개발일지
[BOJ]16918 봄버맨 본문
반응형
https://www.acmicpc.net/problem/16918
풀이
이번에는 그래프 문제 중에서 시뮬레이션 문제로, 내가 좋아하는 유형이었다. 문제집 중에서 직접 광탈하면서 모은 코테라는 문제집을 친절하게도 만들어주신 분이 계셔서, 코테를 준비하는 나로써는 매일 풀어보고 있다. 문제는 굉장히 복잡해 보이고, 3초마다 계산해야 할 것처럼 보이지만, 사실 n이 1인 경우를 제외하고 보면 n이 짝수인지 홀수인지 따라 나오는 값은 정해져 있다. 만약 짝수라면 무조건 모든 그래프가 O로 채워져 있고, 홀수라면 전체가 O로 채워진 그래프에서 전에 할당해놓은 폭탄들은 인접한 칸을 빈칸으로 만들어준 값을 반환하기만 하면 된다. 각 경우의 수를 나눠서 구현해주면 되는 문제였다.
import sys
from collections import deque
input = lambda: sys.stdin.readline().rstrip()
r, c, n = map(int, input().split())
mtr = [input() for _ in range(r)]
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
bomb = [[mtr[i][j] for j in range(c)]for i in range(r)]
cnt = 1
if n == 1:
for i in range(r):
for j in range(c):
print(bomb[i][j], end = '')
print()
else:
if n % 2 == 0:
for i in range(r):
for j in range(c):
print('O', end = '')
print()
else:
for i in range(n//2):
ans = [["O" for _ in range(c)] for _ in range(r)]
for j in range(r):
for k in range(c):
if bomb[j][k] == 'O':
ans[j][k] = '.'
for h in range(4):
nx = j + dx[h]
ny = k + dy[h]
if nx < 0 or ny < 0 or nx >= r or ny >= c:
continue
if ans[nx][ny] == 'O':
ans[nx][ny] = '.'
for j in range(r):
for k in range(c):
bomb[j][k] = ans[j][k]
for i in range(r):
for j in range(c):
print(ans[i][j], end = '')
print()
반응형
'BOJ' 카테고리의 다른 글
[BOJ]8972 미친 아두이노 (0) | 2022.07.08 |
---|---|
[BOJ]16967 배열 복원하기 (0) | 2022.07.06 |
[BOJ]15591 MooTube(Silver) (0) | 2022.07.03 |
[BOJ]1743 음식물 피하기 (0) | 2022.06.28 |
[BOJ] 2251 물통 (0) | 2022.06.28 |