728x90
반응형
SMALL
Programmers 레벨 0_코딩테스트 입문 문제 풀이
https://school.programmers.co.kr/learn/challenges/beginner?
코딩테스트 입문 | 프로그래머스 스쿨
코딩테스트에 처음 도전하는 사람들을 위한 입문 문제 모음. 쉬운 문제부터 하나씩 도전해 보면서 코딩테스트에 자신감도 붙이고 문제 해결 능력을 키워보세요!
school.programmers.co.kr
풀이 날짜 : 2023-10-04
소요 시간 : 80min
문제 이름
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.
HINT 1.
위험지역을 2로 구분하기
(최종적으로 지뢰 없는 지역 0만 추출 가능)
반응형
HINT 2.
경계선 처리 주의하기
(모서리에 있을 때는 위험지역이 8군데가 아니게 됨)
나의 풀이
def solution(board):
dxlist = [-1, 0, 1, 1, 1, 0, -1, -1]
dylist = [1, 1, 1, 0, -1, -1, -1, 0]
for x in range(len(board)) :
for y in range(len(board[0])) :
if board[x][y] == 1 :
for dx, dy in zip(dxlist, dylist) :
if x+dx < 0 or y+dy < 0 or x+dx >= len(board) or y+dy >= len(board[0]) :
pass
elif board[x+dx][y+dy] == 0 :
board[x+dx][y+dy] = 2
return sum([1 for b in board for i in b if i == 0])
dxlist, dylist를 조합하면 각각 왼쪽 대각선 위, 위, 오른쪽 대각선 위, 오른쪽, 오른쪽 대각선 아래, 아래, 왼쪽 대각선 아래, 왼쪽 순으로 좌표가 이동된다.
만약 board[x][y]가 1이고, 주위가 0이라면 위험 지역을 2로 바뀌도록 코드를 짰다.
여기서 주의할 점은 경계선을 처리해주어야 한다는 것이다.
1) x나 y가 0일 경우, [-1] 인덱스를 이용하지 않게 x+dx < 0 or y+dy < 0 조건문을 걸었다.
2) x나 y가 끝에 있을 경우, +1을 하면 인덱스 에러가 나오기 때문에 x+dx >= len(board) or y+dy >= len(board[0]) 조건문을 걸었다.
- 2)를 처음엔 try~except로 예외처리를 해주었는데, 더 간단한 방법을 썼다.
이 경계선 처리 때문에 시간이 오래 걸렸다.
다른 풀이
def solution(board):
n = len(board)
danger = set()
for i, row in enumerate(board):
for j, x in enumerate(row):
if not x:
continue
danger.update((i+di, j+dj) for di in [-1,0,1] for dj in [-1, 0, 1])
return n*n - sum(0 <= i < n and 0 <= j < n for i, j in danger)
def solution(board):
answer = 0
for col in range(len(board)):
for row in range(len(board[col])):
if board[row][col] == 1:
for j in range(max(col-1,0),min(col+2,len(board))):
for i in range(max(row-1,0),min(row+2,len(board))):
if board[i][j] == 1:
continue
board[i][j] = -1
for i in board:
answer += i.count(0)
return answer
max와 min으로 인해 경계를 벗어나지 않을 수 있다.
728x90
반응형
LIST
'Coding Study > Programmers (Python)' 카테고리의 다른 글
| [프로그래머스/파이썬] Lv.0 평행 (12') (0) | 2023.10.05 |
|---|---|
| [프로그래머스/파이썬] Lv.0 겹치는 선분의 길이 (25') (0) | 2023.10.05 |
| [프로그래머스/파이썬] Lv.0 OX 퀴즈 (10') (1) | 2023.10.04 |
| [프로그래머스/파이썬] Lv.0 특이한 정렬 (75') (0) | 2023.09.29 |
| [프로그래머스/파이썬] Lv.0 문자열 밀기 (8') (0) | 2023.09.29 |