[백준/파이썬/삼성] 14502 파이썬 풀이

2021. 10. 31. 15:57·Algorithm (PS)
728x90

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

 

14502번: 연구소

인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크

www.acmicpc.net

 

문제 유형 : 구현 + dfs 

문제집에는 dfs로 분류되어 있었는데 구현 유형스러웠던 문제 ㅋㅋ

1. 벽을 설치한다 3개까지 -> board 2차원 배열 돌면서 board[i][j] == 0 이면 벽 설치 가능 

2. 3개 다 설치했으면 바이러스를 퍼뜨려 본다. 바이러스 퍼뜨릴 때 재귀호출해서 상하좌우 이동한다.

3. 바이러스를 퍼뜨린 후 안전지대를 계산한다.그리고 원래 가지고 있던 최대 안전지대 값이랑 비교하면서 최대 안전지대 결과 값을 구한다.

를 구현해보자 ㅋㅋ

n, m = map(int, input().split())
board = []
temp = [[0]*m for _ in range(n)] # 벽을 설치한 다음의 리스트

for i in range(n):
    board.append(list(map(int, input().split())))

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

def virus(x,y):
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        if nx >= 0 and nx < n and ny >= 0 and ny < m:
            if temp[nx][ny] == 0 :
                temp[nx][ny] = 2
                virus(nx,ny)

def get_safe():
    score = 0
    for i in range(n):
        for j in range(m):
            if temp[i][j] == 0:
                score += 1
    return score

result = 0

def dfs(count):
    global result
    if count == 3: # 외벽 설치 3개 했을 때 바이러스 퍼트려서 확인한다.
        for i in range(n):
            for j in range(m):
                temp[i][j] = board[i][j]
        
        for i in range(n):
            for j in range(m):
                if temp[i][j] == 2:
                    virus(i,j)
                    
        result = max(result, get_safe())

    # 외벽 설치하기 
    for i in range(n):
        for j in range(m):
            if board[i][j] == 0:
                count += 1
                board[i][j] = 1
                dfs(count)
                board[i][j] = 0
                count -= 1

dfs(0)
print(result)
728x90

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

[프로그래머스] 카카오 신입 공채 2020 - 괄호변환  (0) 2021.11.03
백준 18405 경쟁적 전염 Python 풀이  (0) 2021.11.03
[프로그래머스/카카오] 외벽점검  (0) 2021.10.31
백준 15868 치킨배달 파이썬, 삼성 SW 기출문제  (0) 2021.10.26
백준 1697 숨바꼭질 파이썬 풀이  (0) 2021.09.07
'Algorithm (PS)' 카테고리의 다른 글
  • [프로그래머스] 카카오 신입 공채 2020 - 괄호변환
  • 백준 18405 경쟁적 전염 Python 풀이
  • [프로그래머스/카카오] 외벽점검
  • 백준 15868 치킨배달 파이썬, 삼성 SW 기출문제
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

인기 글

태그

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

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
[백준/파이썬/삼성] 14502 파이썬 풀이
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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