Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Nonhomogeneous ODEs
- 삼성SW역량테스트
- 비제차 상미분 방정식
- homogeneous
- 맛집
- 코딩테스트
- Homogeneous ODEs
- Ode
- 공업수학
- 미방
- SW역량테스트
- 공수 문제풀이
- Python
- ODEs
- English
- 백준
- kreyszig
- 대학
- Problem Set 1.4
- vocabulary
- Conversation
- Problem set 1.5
- 공학수학
- 영어회화
- 공수
- Advanced Engineering Mathematics
- 문제풀이
- 미분방정식
- 공수1
- Problem set 2.7
Archives
- Today
- Total
한걸음
백준 2636 : 치즈 본문
반응형
https://www.acmicpc.net/problem/2636
https://github.com/HPYoo/swcodingtest/commit/dc688ac924d0d29d25c84cea3a47487ff67d4364
치즈 먹다 체할뻔
1. 오잉 조건 하나가 없네?
2638 치즈 문제를 먼저 풀고나서 바로 2636을 풀어보니 훨씬 쉬웠고, 풀면서 다른 방식으로 접근해서 풀어봐야겠다라는 생각에 치즈의 외부 판단과 치즈 가장자리 판단을 방문처리함수를 통해 적용시켰다. 이 때 방문 처리 함수는 3차원 배열로 0번째 N X M 크기의 배열에는 외부임을 알리는 배열, 1번째 배열은 치즈의 가장자리임을 알리는 배열로 사용하였다.
큐를 돌리면서 반복적으로 시행을 시키니 불필요하게 코드가 길어지는 일 없이 간단하게 해결할 수 있었다.
내일은 2638 : 치즈에 다시 적용해봐야겠다. 생각 충분히 하니 금방 또 잘 풀리네
2. 전체 코드
메모리 : 117168 KB 시간 : 168 ms 풀이시간 : 약 20 ~ 30분? 시간 안재고 풀어서 잘 모르겠음.
여기에서 117 MB 정도의 메모리가 사용되었는데 조건하나 추가했다고 50MB 가 추가 되었다는 건 내가 메모리 활용을 잘 못하고 있다는 반증이겠지? 으쌰으쌰 열공합시다
from collections import deque
N, M = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(N)]
cheese = []
for i in range(N):
for j in range(M):
if board[i][j] == 1 : cheese.append([i, j])
visited = [[[False for _ in range(M)] for _ in range(N)] for _ in range(2)]
# 상, 하, 좌, 우
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
# 외부 / 치즈
def solve():
q = deque([[0, 0]])
visited[0][0][0] = True
num = len(cheese)
it = 0
last_cnt = 0
while num > 0 :
temp = []
cnt = 0
while q :
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < M :
if board[nx][ny] == 0 and not visited[0][nx][ny]:
visited[0][nx][ny] = True
q.append([nx, ny])
if board[nx][ny] == 1 and not visited[1][nx][ny] :
temp.append([nx, ny])
visited[1][nx][ny] = True
for x, y in temp :
board[x][y] = 0
visited[0][x][y] = True
cnt += 1
q.append([x, y])
last_cnt = num
num -= cnt
it += 1
return [it, last_cnt]
result = solve()
for i in range(2):
print(result[i])
반응형
'Coding Test' 카테고리의 다른 글
백준 2589 : 보물섬 (2) | 2023.11.24 |
---|---|
백준 2784 : 가로 세로 퍼즐 (1) | 2023.11.23 |
백준 2536 : 버스 갈아타기 (4) | 2023.11.21 |
백준 4963 : 섬의 개수 (2) | 2023.11.20 |
백준 23290 : 마법사 상어와 복제 (2) | 2023.11.19 |