[백준] 18428번: 감시 피하기

2023. 3. 5. 20:57·Algorithm (PS)
728x90

https://www.acmicpc.net/problem/18428

 

18428번: 감시 피하기

NxN 크기의 복도가 있다. 복도는 1x1 크기의 칸으로 나누어지며, 특정한 위치에는 선생님, 학생, 혹은 장애물이 위치할 수 있다. 현재 몇 명의 학생들은 수업시간에 몰래 복도로 빠져나왔는데, 복

www.acmicpc.net

구현 + 브루트포스 + 그래프 탐색 문제였다. 

 N 값이 3 ~ 6 으로 작아서 브루트포스로 장애물을 설치할 3군데를 정해서 풀어도 되는 문제였다. 

선생님이 움직이지 않아서 상하좌우 방향으로 세로줄 전체와 가로줄 전체만 확인해주면 되었다. 

from itertools import combinations
import sys
input = sys.stdin.readline

n = int(input())
teacher = []
blank = [] # 장애물 설치 가능 빈칸
board = [list(input().split()) for _ in range(n)]
result = False
for i in range(n):
    for j in range(n):
        if board[i][j] == 'T':
            teacher.append([i, j])
        if board[i][j] == 'X':
            blank.append([i, j])

dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

def check_range(i, j):
    if 0 <= i < n and 0 <= j < n:
        return True
    else:
        return False

def seek_student():
    for tx, ty in teacher:
        for i in range(4):
            nx = tx + dx[i]
            ny = ty + dy[i]

            while True:

                if not check_range(nx, ny):
                    break
                if board[nx][ny] == 'S':
                    return False
                elif board[nx][ny] == 'O':
                    break

                nx += dx[i]
                ny += dy[i]
    return True



for test_case in combinations(blank, 3):
    for x, y in test_case:
        board[x][y] = 'O'

    temp_result = seek_student()

    if temp_result: # True
        result = True
        break

    for x, y in test_case:
        board[x][y] = 'X'

if result:
    print("YES")
else:
    print("NO")
728x90

'Algorithm (PS)' 카테고리의 다른 글

[백준] 2170번: 선 긋기 Python - 스위핑 알고리즘, 정렬  (0) 2023.03.06
[프로그래머스] 행렬 테두리 회전하기 Python/파이썬  (0) 2023.03.05
[백준] 1956번: 운동 Python (플로이드-워셜)  (0) 2023.03.04
[프로그래머스] 경주로 건설 (DFS+DP) Python + 히든케이스 정리  (1) 2023.03.04
[프로그래머스] 표 편집 (Python) - Linked List  (0) 2023.03.02
'Algorithm (PS)' 카테고리의 다른 글
  • [백준] 2170번: 선 긋기 Python - 스위핑 알고리즘, 정렬
  • [프로그래머스] 행렬 테두리 회전하기 Python/파이썬
  • [백준] 1956번: 운동 Python (플로이드-워셜)
  • [프로그래머스] 경주로 건설 (DFS+DP) Python + 히든케이스 정리
minjiwoo
minjiwoo
Data Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minjiwoo
minji's engineering note
minjiwoo
전체
오늘
어제
  • 분류 전체보기 (613)
    • Data Engineering (42)
      • Apache Spark (11)
      • Databricks & Delta Lake (9)
      • Airflow (3)
      • SQL (6)
      • Trouble Shooting (2)
      • Hadoop (2)
      • MLOps (1)
    • Cloud Engineering (104)
      • AWS (23)
      • Linux 🐧 (29)
      • Docker 🐳 (21)
      • Kubernetes ⚙️ (20)
      • Ansible (10)
    • Computer Science (87)
      • 네트워크 (9)
      • 운영체제 (25)
      • 정보처리기사 (48)
      • CS 기술 면접 스터디 (3)
    • Programming Languages (27)
      • Python (17)
      • C와 C++ (10)
    • Backend (5)
      • Django (2)
    • 프로젝트 (2)
      • 테크포임팩트 (2)
    • iOS (11)
      • 레이블러리 (2)
    • Algorithm (PS) (275)
      • LeetCode (6)
    • 개발일기 (30)
      • 내돈내산 후기🎮 (3)
      • 개발자 취준생 (5)
      • Today I Learned (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Hi there

인기 글

태그

  • 알고리즘
  • docker
  • ansible
  • BFS
  • dp
  • Databricks
  • python
  • 백준
  • dfs
  • 프로그래머스
  • 파이썬
  • Leetcode
  • 클라우드
  • 데이터브릭스
  • 카카오코딩테스트
  • 리눅스
  • 데이터엔지니어링
  • SPARK
  • 빅데이터
  • 쿠버네티스
  • 데이터엔지니어
  • Swift
  • 운영체제
  • 스파크
  • linux
  • 코딩테스트
  • AWS
  • Kubernetes
  • 백트래킹
  • EC2

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
[백준] 18428번: 감시 피하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.