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
- DART
- 자바
- programers
- 아마존 웹 서비스
- 플러터
- 스위프트
- 프로그래머스
- Android
- Flutter
- 머신러닝
- 현대sw
- java
- 파이썬
- aws
- SWIFT
- 다트
- 코테
- baekjoon
- VSCode
- MVVM
- GDSC
- 안드로이드
- 백준
- 소프티어
- Python
- 개발
- 알고리즘
- 코틀린
- kotlin
- softeer
Archives
- Today
- Total
조준장 개발자 생존기
[baekjoon] 백준 14503번(파이썬): 로봇 청소기 본문
문제
14503번: 로봇 청소기
로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어
www.acmicpc.net
알고리즘
- dfs 탐색을 통해 문제를 수행한다.
- 반복문을 통해 현재 방향에서 왼쪽 방향씩을 확인한다.
- 현재 방향 + 3을 4로 나눈 나머지가 왼쪽 방향이다.
- 이동하려는 위치가 빈 곳이라면 탐색을 하고 현재 방향을 변경한다.
- 4방향 모두 탐색했다면 후진 방향을 확인한다.
- 현재 방향 + 2를 4로 나눈 나머지가 후진 방향이다.
- 이동 위치가 벽이라면 리턴하고 벽이 아니라면 탐색한다.
코드
import sys
def dfs(x, y, v):
global answer
# 빈 곳이면 청소
if graph[x][y] == 0:
graph[x][y] = 2 # 방문 처리
answer += 1 # 청소 구역 카운트
# 반복문을 통해 4방향 확인
for _ in range(4):
nv = (v + 3) % 4 # 현재 방향 + 3을 4로 나눈 나머지가 왼쪽 방향
nx = x + dx[nv]
ny = y + dy[nv]
# 이동 위치가 빈 곳이면 탐색
if graph[nx][ny] == 0:
dfs(nx, ny, nv)
return
# 현재 방향 변경
v = nv
# 4방향 모두 탐색했다면
nv = (v + 2) % 4 # 현재방향 + 2를 4로 나눈 나머지가 후진 방향
nx = x + dx[nv]
ny = y + dy[nv]
# 이동 위치가 벽이라면 리턴
if graph[nx][ny] == 1:
return
# 이동 위치가 벽이 아니라면 탐색
dfs(nx, ny, v)
n, m = map(int, sys.stdin.readline().split())
r, c, d = map(int, sys.stdin.readline().split())
graph = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
# d => 0,3,2,1 순서로 돌아야함. 북/서/남/동
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
answer = 0
dfs(r, c, d)
print(answer)
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 2225번(파이썬): 합분해 (0) | 2022.05.07 |
---|---|
[baekjoon] 백준 2133번(파이썬): 타일 채우기 (0) | 2022.05.06 |
[baekjoon] 백준 15686번(파이썬): 치킨 배달 (0) | 2022.05.04 |
[baekjoon] 백준 18111번(파이썬): 마인크래프트 (0) | 2022.05.02 |
[baekjoon] 백준 1759번(파이썬): 암호 만들기 (0) | 2022.05.01 |