[백준] 16236번, 아기상어 (Python)

2021. 8. 16. 13:45·알고리즘/백준
728x90
반응형

문제

 

코드

import collections

n = int(input())
graph = [list(map(int,input().split())) for _ in range(n)]
dx,dy = [-1,1,0,0], [0,0,-1,1]
answer = 0
size = 2
exp = 0

def bfs(a,b,size):
    queue = collections.deque()
    queue.append((a,b))
    visited[a][b] = True
    while queue:
        x,y = queue.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < n and 0 <= ny < n:
                if (graph[nx][ny] == size or graph[nx][ny] == 0) and visited[nx][ny] == False:
                    visited[nx][ny] = True
                    distance[nx][ny] = distance[x][y] + 1
                    queue.append((nx,ny))
                elif graph[nx][ny] < size and visited[nx][ny] == False:
                    visited[nx][ny] = True
                    distance[nx][ny] = distance[x][y] + 1
                    queue.append((nx,ny))
                    result.append([distance[nx][ny], nx, ny])
while True:
    result = []
    visited = [[False]*n for _ in range(n)]
    distance = [[0]*n for _ in range(n)]
    for x in range(n):
        for y in range(n):
            if graph[x][y] == 9:
                bfs(x,y,size)
                graph[x][y] = 0
    if result:
        result.sort()
        dis,r_x,r_y = result.pop(0)
        exp += 1
        answer += dis
        graph[r_x][r_y] = 9
    else:
        break
    if exp == size:
        size += 1
        exp = 0
print(answer)

 

아기상어는 자기보다 크기가 작은 물고기를 먹을 수 있고 크기가 같다면 지나갈 수만 있고 크기가 자신보다 크다면 지나갈 수 없다.

 

bfs를 돌면서 자신보다 크기가 작은 물고기(먹을수 있는 물고기)를 만나면 result 리스트에 거리, x좌표, y좌표 순으로 넣어준다.

 

result 리스트를 sort 정렬 시켜서 가장 거리가 짧은 물고기를 먹고 (거리가 같다면 x좌표, y좌표 순으로 오름차순 정렬된다.) exp를 +1 해주고 만약 exp와 size가 같다면 size를 1 증가시켜 준다.

 

아기상어가 먹을수 있는 물고기가 없을때 까지 계속 돌아주고 아기상어가 물고기를 잡아먹은 시간은 이동거리와 똑같으므로 distance배열로 구해줬다.

반응형
저작자표시 (새창열림)

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 1916번, 최소비용 구하기 (Python)  (0) 2021.08.18
[백준] 14888번, 연산자 끼워넣기 (Python)  (0) 2021.08.17
[백준] 1759번, 암호 만들기 (Python)  (0) 2021.08.13
[백준] 3190번, 뱀 (Python)  (0) 2021.08.12
[백준] 3055번, 탈출 (Python)  (0) 2021.08.12
'알고리즘/백준' 카테고리의 다른 글
  • [백준] 1916번, 최소비용 구하기 (Python)
  • [백준] 14888번, 연산자 끼워넣기 (Python)
  • [백준] 1759번, 암호 만들기 (Python)
  • [백준] 3190번, 뱀 (Python)
wookcode
wookcode
공부한 내용들을 정리하고 기록하는 블로그입니다.
    반응형
  • wookcode
    wookcode
    wookcode
  • 전체
    오늘
    어제
    • 카테고리 (196)
      • study (1)
        • 아파치 카프카 애플리케이션 프로그래밍 with 자.. (0)
        • 인프런 (1)
      • Live Study (15)
      • Programming (14)
        • Java (8)
        • Python (1)
        • Springboot (5)
        • MSA (0)
      • 알고리즘 (117)
        • 백준 (58)
        • 프로그래머스 (59)
      • 에러로그 (5)
      • 항해99 (23)
      • 면접 (1)
      • 프로젝트 (1)
      • CS (19)
        • 네트워크 (2)
        • 운영체제 (2)
        • 데이터베이스 (2)
        • 컴퓨터구조 (1)
        • Java (8)
        • Spring (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    후기
    SFlash
    spring
    에러
    브루트포스
    김영한
    orm
    파이썬
    카카오인턴
    java
    카카오코딩테스트
    SpringBoot
    해결
    백준
    괄호
    실전프로젝트
    프로그래머스
    항해99
    코딩테스트
    정리
    인프런
    그리디
    조합
    jpa
    알고리즘
    스파르타코딩클럽
    항해마켓
    회고
    버그
    미니프로젝트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
wookcode
[백준] 16236번, 아기상어 (Python)
상단으로

티스토리툴바