문제가 제시한 규칙에 따라 개체를 이동시키는 알고리즘.
r = row = 행
c = column = 열

dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1] #12시 방향에서 시계방향으로
for r in range(5):
for c in range(5): #2차원 배열 기본 코드
for k in range(4): #특정 [행,열]의 4방향 탐색
nr = r + dr[k]
nc = c + dc[k]
if nr >= 0 and nr < 5 and nc >= 0 and nc <5: #정상범주 확인
if nums[nr][nc] <= nums[r][c]:
flag = False
※ 8방향 탐색방법
dr = [-1,-1,0,1,1,1,0,-1]
dc = [0,1,1,1,0,-1,-1,-1]
1. 웅덩이 문제

def solution(nums):
answer = 0
dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1]
n = len(nums)
for r in range(n):
for c in range(n):
flag = True #웅덩이
for k in range(4): # [r,c] 기준 네방향 탐색
nr = r + dr[k]
nc = c + dc[k]
if 0 <= nr < n and 0 <= nc < n and nums[nr][nc] <= nums[r][c] :
#음수일 경우 먼저 배제, 웅덩이가 아닐 조건을 탐색
flag = False #웅덩이가 아님을 표시 후 다음 [r,c]로 이동
break
if flag :
answer += 1
return answer
웅덩이라고 먼저 가정 후(flag=True), 조건문을 통해 웅덩이가 아님을 검증.
"상하좌우 인접한 지역의 숫자가 모두 자신보다 클 경우"
=> "상하좌우 인접한 지역의 숫자가 하나라도 자신보다 작을 경우" 로 해석하여 풀이함.
2.2. [프로그래머스 level0] 안전지대
https://school.programmers.co.kr/learn/courses/30/lessons/120866
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

안전한 지역의 칸수를 구해야함
=> 모든 지역을 안전하다고 가정 후, 안전하지 않은 지역 찾기(flag를 false으로)
그 후에도 flag가 True라면, 안전한 지역으로 카운트
def solution(board):
dr=[-1, -1, 0, 1, 1, 1, 0, -1]
dc=[0, 1, 1, 1, 0, -1, -1, -1]
answer = 0
n=len(board)
for r in range(n):
for c in range(n):
flag = True # 안전 지역으로 가정
if board[r][c]==1: #지뢰지역
flag=False
for k in range(8): #지뢰 인접지역
nr = r + dr[k]
nc = c + dc[k]
if 0 <= nr < n and 0 <= nc < n and board[nr][nc] == 1:
flag = False
break
if flag :
answer += 1
return answer
'대외교육 > 코딩테스트' 카테고리의 다른 글
[프로그래머스][C++ 코딩기초트레이닝]DAY3~DAY4 (0) | 2023.10.01 |
---|---|
[프로그래머스][C++ 코딩기초트레이닝] DAY 1 ~ DAY 2 (0) | 2023.10.01 |
[230929][python]프로그래머스 코딩 기초 트레이닝 (day4) (0) | 2023.09.28 |
[230928][python]프로그래머스 코딩 기초 트레이닝 (day1~day3) (0) | 2023.09.28 |
[프로그래머스 특강]1-2. 시뮬레이션 예시 : 청소 로봇(기본) (0) | 2023.08.25 |