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 | 31 |
Tags
- C언어
- Lv. 1
- SQL 고득점 KIT
- bfs
- 동적계획법
- Python
- Java
- 깊이 우선 탐색
- join
- dfs
- javascript
- 자바스크립트
- Lv. 2
- 오블완
- SQL
- 프로그래머스
- Dynamic Programming
- softeer
- 티스토리챌린지
- group by
- 너비 우선 탐색
- Lv. 3
- LEVEL 2
- DP
- programmers
- 소프티어
- select
- level 3
- Lv. 0
- 파이썬
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
Softeer level3 동계 테스트 시점 예측 Python 본문
문제 링크 : https://softeer.ai/practice/info.do?idx=1&eid=411
정답 코드
import sys
input = sys.stdin.readline
from collections import deque
N, M = map(int, input().split())
ices = []
meltIces = []
iceBergMap = []
for r in range(N):
tmpIce = list(map(int, input().split()))
iceBergMap.append(tmpIce)
for c in range(M):
if tmpIce[c]:
ices.append((r, c))
dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]
def isValid(nr, nc):
return 0 <= nr < N and 0 <= nc < M
outSideAir = []
def checkAir():
sr, sc = 0, 0
tmpOutSideAir = set()
tmpOutSideAir.add((0, 0))
q = deque()
q.append((sr, sc))
V = [[0 for _ in range(M)] for _ in range(N)]
V[sr][sc] = 1
while q:
r, c = q.popleft()
for d in range(4):
nr = r + dr[d]
nc = c + dc[d]
if isValid(nr, nc):
if V[nr][nc] or iceBergMap[nr][nc]:
continue
V[nr][nc] = 1
tmpOutSideAir.add((nr, nc))
q.append((nr, nc))
return list(tmpOutSideAir)
def melting():
for r, c in meltIces:
ices.remove((r, c))
iceBergMap[r][c] = 0
def checkMeltIce():
tmpMeltIce = []
for r, c in ices:
outCnt = 0
for d in range(4):
nr = r + dr[d]
nc = c + dc[d]
if iceBergMap[nr][nc]:
continue
if (nr, nc) in outSideAir:
outCnt += 1
if outCnt > 1:
tmpMeltIce.append((r, c))
return tmpMeltIce
time = 0
while ices:
time += 1
outSideAir = checkAir()
meltIces = checkMeltIce()
melting()
print(time)
풀이 방식
브루트포스 알고리즘 + BFS
1. 외부 공기 확인 checkAir : BFS
2. 녹는 얼음 확인 checkMeltIce : bruteForce 브루트포스
3. 얼음 녹기
느낀점
소프티어 문제들은 2차원 배열 전체를 확인하는 문제가 많은 것 같다. 다시말해서 브루트포스 알고리즘을 활용하는 경우가 많다고 느껴진다.
'알고리즘' 카테고리의 다른 글
Softeer level3 [HSAT 5회 정기 코딩 인증평가 기출] 성적 평가 Python (0) | 2023.08.29 |
---|---|
Softeer level3 우물 안 개구리 Python (0) | 2023.08.28 |
Softeer level3 조립라인 Python (2) | 2023.08.27 |
Softeer level3 [21년 재직자 대회 예선] 좌석 관리 Python (0) | 2023.08.26 |
Softeer level3 [21년 재직자 대회 본선] 코딩 테스트 세트 Python (0) | 2023.08.23 |