쵼쥬
쵼쥬의 개발공부 TIL
쵼쥬
전체 방문자
오늘
어제
  • 분류 전체보기 (276)
    • 코딩테스트 (192)
      • [알고리즘] 알고리즘 정리 (7)
      • [백준] 코딩테스트 연습 (126)
      • [프로그래머스] 코딩테스트 연습 (59)
    • Spring (71)
      • [인프런] 스프링 핵심 원리- 기본편 (9)
      • [인프런] 스프링 MVC 1 (6)
      • [인프런] 스프링 MVC 2 (4)
      • [인프런] 실전! 스프링 부트와 JPA 활용1 (7)
      • [인프런] 실전! 스프링 부트와 JPA 활용2 (5)
      • [인프런] 실전! 스프링 데이터 JPA (7)
      • [인프런] 실전! Querydsl (7)
      • JWT (5)
      • [인프런] Spring Cloud (17)
      • [인프런] Spring Batch (4)
    • Java (6)
      • [Java8] 모던인자바액션 (4)
      • [부스트코스] 웹 백엔드 (2)
      • [패스트캠퍼스] JAVA STREAM (0)
    • CS (6)
      • 디자인 패턴과 프로그래밍 패터다임 (2)
      • 네트워크 (4)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 위클리 챌린지
  • 구현
  • 스프링
  • querydsl
  • 비트마스킹
  • 코딩테스트
  • spring
  • 인프런
  • 자바
  • jpa
  • 타임리프
  • BFS
  • MVC
  • 부스트코스
  • 백준
  • 프로그래머스
  • 누적합
  • 알고리즘
  • 백분
  • Spring Data JPA

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쵼쥬

쵼쥬의 개발공부 TIL

아기 상어 - 16236번
코딩테스트/[백준] 코딩테스트 연습

아기 상어 - 16236번

2022. 2. 23. 10:51

 


내 코드

import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;

		int N = Integer.parseInt(br.readLine());

		int[][] d = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } };
		int[][] arr = new int[N][N];
		PriorityQueue<Shark> pq = new PriorityQueue<>();
		boolean[][] visited = new boolean[N][N];
		int time = 0;

		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 0; j < N; j++) {
				arr[i][j] = Integer.parseInt(st.nextToken());
				if (arr[i][j] == 9) {
					pq.add(new Shark(i, j, 2, 0, 0));
					visited[i][j] = true;
					arr[i][j] = 0;
				}
			}
		}

		while (!pq.isEmpty()) {
			Shark s = pq.poll();

			if (arr[s.x][s.y] > s.size) {
				continue;
			}

			if (arr[s.x][s.y] != 0 && arr[s.x][s.y] < s.size) {
				visited = new boolean[N][N];
				pq.clear();
				time = s.sec;
				s.count++;
				arr[s.x][s.y] = 0;
				if (s.count == s.size) {
					s.count = 0;
					s.size++;
				}
			}

			for (int i = 0; i < 4; i++) {
				int nextX = s.x + d[i][0];
				int nextY = s.y + d[i][1];

				if (nextX >= 0 && nextX < N && nextY >= 0 && nextY < N && !visited[nextX][nextY]) {
					visited[nextX][nextY] = true;
					pq.add(new Shark(nextX, nextY, s.size, s.sec + 1, s.count));
				}
			}
		}

		System.out.println(time);

	}

	static class Shark implements Comparable<Shark> {
		int x, y, size, sec, count;

		public Shark(int x, int y, int size, int sec, int count) {
			this.x = x;
			this.y = y;
			this.size = size;
			this.sec = sec;
			this.count = count;
		}

		@Override
		public int compareTo(Shark o) {
			if (sec == o.sec) {
				if (o.x == x) {
					return y - o.y;
				}
				return x - o.x;
			}

			return sec - o.sec;
		}
	}
}

'코딩테스트 > [백준] 코딩테스트 연습' 카테고리의 다른 글

찾기 - 1786번  (0) 2022.02.24
치킨 배달 - 15686번  (0) 2022.02.23
감시 - 15683번  (0) 2022.02.18
빵집 - 3109번  (0) 2022.02.17
가장 가까운 공통 조상 - 3584번  (0) 2022.02.15
    '코딩테스트/[백준] 코딩테스트 연습' 카테고리의 다른 글
    • 찾기 - 1786번
    • 치킨 배달 - 15686번
    • 감시 - 15683번
    • 빵집 - 3109번
    쵼쥬
    쵼쥬

    티스토리툴바