GitHub ID : soohyun-dev
윤수현의 개발 공간
GitHub ID : soohyun-dev
전체 방문자
오늘
어제
  • 분류 전체보기 (918)
    • 성장기록 (49)
      • 성장기록 (3)
      • 우아한테크코스 (16)
      • 프로젝트 (15)
      • TIL (14)
      • 테오의 스프린트 (1)
    • 프로그래밍언어 (88)
      • C언어 (14)
      • HTML\CSS (12)
      • JavaScript (7)
      • React (23)
      • Python (11)
      • JAVA (14)
      • TypeScript (6)
    • 알고리즘 공부 (736)
      • 코드업 - 파이썬 (108)
      • 백준 - 파이썬 (468)
      • 백준 - 자바스크립트 (125)
      • 프로그래머스 - 파이썬 (1)
      • 프로그래머스 - 자바스크립트 (34)
    • 책 리뷰 (9)
      • 프로그래밍 (3)
      • 독서 (6)
    • 전자기기 (1)
    • 일상, 일기 (18)
    • 기술 세미나 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코딩테스트
  • 파이썬
  • 코드업파이썬
  • 코테
  • 백준파이썬
  • 자바스크립트
  • 백준
  • 백준풀이
  • PYTHON
  • 프로그래머스풀이
  • 영어
  • 영어독해
  • 프로그래머스
  • javascript
  • 독해
  • 코드업
  • 프로그래밍언어
  • 프론트엔드
  • 프로그래머스자바스크립트
  • 코딩

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GitHub ID : soohyun-dev

윤수현의 개발 공간

백준/ Silver 2 문제 , 백준 파이썬 17086 , 아기 상어 2 [BFS]
알고리즘 공부/백준 - 파이썬

백준/ Silver 2 문제 , 백준 파이썬 17086 , 아기 상어 2 [BFS]

2022. 8. 3. 23:14

백준/ Silver 2 문제 , 백준 파이썬 17086 , 아기 상어 2 [BFS]

 

 

Check Point !   ( 해당사항 ✓체크 )

1. 막힘 없이 수월하게 풀린 문제인가?

2. 1시간이내로 풀렸던 문제인가?

3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?

4. 시간을 써도 도무지 풀 수 없는 문제인가?

5. 솔루션을 찾아봤는가?

-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하


<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함


<덧붙일 말>

 

문제 출처

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

 

17086번: 아기 상어 2

첫째 줄에 공간의 크기 N과 M(2 ≤ N, M ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 공간의 상태가 주어지며, 0은 빈 칸, 1은 아기 상어가 있는 칸이다. 빈 칸과 상어의 수가 각각 한 개 이상인 입력만

www.acmicpc.net

 

 

풀이

 

두가지 풀이로 풀었다.

 

첫 번째는 리스트에 1이 적인 위치들을 모두 파악한다음에 동시에 넓혀 나아가는 방법이다.

 

두 번째는 1을 제외한 0의 모든 자리에서 최대한 퍼져 나갈 수 있는 위치를 체크한다.

 

하지만, 모든 0 자리에서 체크를 해야해서 python3 에서는 시간초과가 발생하여 pypy3로만 통과가 가능하다.

 

 

 

정답

 

1. 1위치부터 체크해서 찾기

 

 

 

 

2. 0부터 체크해서 찾기 (pypy3로만 통과)

 

1.

from collections import deque
from copy import deepcopy
import sys
input=sys.stdin.readline

vertical=[1,-1,0,0,1,1,-1,-1]
parallel=[0,0,1,-1,-1,1,-1,1]

N,M=map(int,input().split())
MAP=[list(map(int,input().split())) for _ in range(N)]
dq=deque()
for i in range(N):
    for j in range(M):
        if MAP[i][j]==1:
            dq.append([i,j])

def bfs():
    MAX=0
    while dq:
        X,Y=dq.popleft()
        for i in range(8):
            mx,my=X+vertical[i],Y+parallel[i]
            if 0<=mx<N and 0<=my<M:
                if MAP[mx][my]==0:
                    dq.append([mx,my])
                    MAP[mx][my]=MAP[X][Y]+1
                    if MAX<MAP[mx][my]:
                        MAX=MAP[mx][my]
    return MAX-1

print(bfs())

 

2. 

from collections import deque
from copy import deepcopy
import sys
input=sys.stdin.readline


vertical=[1,-1,0,0,1,1,-1,-1]
parallel=[0,0,1,-1,-1,1,-1,1]

N,M=map(int,input().split())
MAP=[list(map(int,input().split())) for _ in range(N)]

def bfs(x,y):
    dq=deque()
    dq.append([x,y])
    L=deepcopy(MAP)
    cnt=0
    visited=[[False for _ in range(M)] for _ in range(N)]
    visited[x][y]=True
    check=False
    while dq:
        if check==True:
            break
        X,Y=dq.popleft()
        for i in range(8):
            mx,my=X+vertical[i],Y+parallel[i]
            if 0<=mx<N and 0<=my<M:
                if MAP[mx][my]==0 and visited[mx][my]==False:
                    dq.append([mx,my])
                    visited[mx][my]=True
                    L[mx][my]=L[X][Y]+1
                    if cnt<L[mx][my]:
                        cnt=L[mx][my]
                elif MAP[mx][my]==1:
                    cnt=L[X][Y]+1
                    check=True
                    break
    return cnt
    
MAX=0
for i in range(N):
    for j in range(M):
        if MAP[i][j]==0:
            result=bfs(i,j)
            if MAX<result:
                MAX=result

print(MAX)

 

반응형

'알고리즘 공부 > 백준 - 파이썬' 카테고리의 다른 글

백준/ Gold 5 문제 , 백준 파이썬 16234 , 인구 이동 [BFS]  (0) 2022.08.05
백준/ Silver 2 문제 , 백준 파이썬 3187 , 양치기 꿍 [BFS]  (0) 2022.08.04
백준/ Silver 1 문제 , 백준 파이썬 1303 , 전쟁 - 전투 [BFS]  (0) 2022.08.03
백준/ Silver 3 문제 , 백준 파이썬 1388 , 바닥 장식 [BFS]  (0) 2022.08.03
백준/ Silver 1 문제 , 백준 파이썬 14716 , 현수막 [BFS]  (0) 2022.08.03
    '알고리즘 공부/백준 - 파이썬' 카테고리의 다른 글
    • 백준/ Gold 5 문제 , 백준 파이썬 16234 , 인구 이동 [BFS]
    • 백준/ Silver 2 문제 , 백준 파이썬 3187 , 양치기 꿍 [BFS]
    • 백준/ Silver 1 문제 , 백준 파이썬 1303 , 전쟁 - 전투 [BFS]
    • 백준/ Silver 3 문제 , 백준 파이썬 1388 , 바닥 장식 [BFS]
    GitHub ID : soohyun-dev
    GitHub ID : soohyun-dev
    환영합니다!😊 이곳은 저의 개발에 관한 내용들을 정리하는 공간입니다. 알고리즘 풀이에도 관심이 많아요. 좋은 하루 되세요~! github : soohyun_dev

    티스토리툴바