일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 페이코 친구코드
- 플러터 개발환경 설정
- php 프로그래밍 입문 솔루션
- 자바 스프링
- C
- 한정 분기
- spring
- C언어
- php 프로그래밍 입문 연습문제
- php
- 배열
- php 프로그래밍 입문
- JAVA SPRING
- 파이썬
- programmers
- php 프로그래밍 입문 예제
- 백준
- 페이코 추천인
- php 프로그래밍 입문 3판
- php 프로그래밍 입문 문제풀이
- Java
- SWEA
- 페이코 초대코드
- 최단 경로
- 플러터
- 자바
- 스프링
- php 프로그래밍
- 페이코 추천인코드
- Flutter
Archives
- Today
- Total
04-07 07:30
ImJay
[SWEA/Java] 1249. 보급로 본문
반응형
[SWEA/Java] 1249. 보급로
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
풀이
package edu.ssafy.im.SWEA.D4.No1249;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
public class Solution {
int n;
int[][] graph; // 지도 정보를 담을 배열
int[][] sum; // 출발지부터 해당 위치까지의 최소 복구 시간을 담을 배열
boolean[][] visited; // 방문 여부를 체크할 배열
int[][] direction = { { 0, 1 }, { 0, -1 }, { 1, 0 }, { -1, 0 } }; // 이동 방향 상하좌우
public static void main(String[] args) throws IOException {
new Solution().sol();
}
public void sol() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCase = Integer.parseInt(br.readLine()); // 테스트 케이스의 수
for (int t = 1; t <= testCase; t++) {
n = Integer.parseInt(br.readLine()); // 지도의 크기
graph = new int[n][n]; // 지도 정보 배열 초기화
for (int r = 0; r < graph.length; r++) {
String row = br.readLine();
for (int c = 0; c < graph.length; c++) {
graph[r][c] = row.charAt(c) - '0'; // 지도 정보 입력
}
}
sum = new int[n][n]; // 최소 복구 시간 배열 초기화
visited = new boolean[n][n]; // 방문 여부 배열 초기화
bfs(); // BFS 수행하여 최소 복구 시간 계산
// 출력
System.out.println("#" + t + " " + sum[n - 1][n - 1]);
}
br.close();
}
public void bfs() {
Deque<Point> deque = new ArrayDeque<>(); // BFS를 위한 덱
deque.add(new Point(0, 0)); // 출발지 추가
visited[0][0] = true; // 출발지 방문 표시
while (!deque.isEmpty()) {
Point point = deque.poll(); // 덱에서 하나 꺼내기
int x = point.x; // 현재 위치의 x 좌표
int y = point.y; // 현재 위치의 y 좌표
for (int d = 0; d < direction.length; d++) {
int newX = x + direction[d][0]; // 이동 후 x 좌표
int newY = y + direction[d][1]; // 이동 후 y 좌표
if (0 <= newX && newX < n && 0 <= newY && newY < n) { // 이동 가능한 위치인지 확인
if (!visited[newX][newY]) { // 아직 방문하지 않은 위치라면
visited[newX][newY] = true; // 방문 표시
sum[newX][newY] = graph[newX][newY] + sum[x][y]; // 현재 위치까지의 복구 시간 + 이동한 위치의 복구 시간
deque.addLast(new Point(newX, newY)); // 덱에 이동한 위치 추가
} else { // 이미 방문한 위치라면
if (graph[newX][newY] + sum[x][y] < sum[newX][newY]) { // 더 작은 복구 시간이라면
sum[newX][newY] = graph[newX][newY] + sum[x][y]; // 복구 시간 업데이트
deque.addLast(new Point(newX, newY)); // 덱에 이동한 위치 추가
}
}
}
}
}
}
class Point {
int x;
int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
}
반응형
'SW Expert Academy > D4' 카테고리의 다른 글
[SWEA/Java] 1218. 괄호 짝짓기 (0) | 2024.02.04 |
---|---|
[SWEA/Java] 1210. Ladder1 : 재귀로 풀기 (0) | 2024.02.04 |
[SWEA/Java] 4408. 자기 방으로 돌아가기 (0) | 2024.01.29 |
[SWEA/Java] 1210. [S/W 문제해결 기본] 2일차 - Ladder1 (0) | 2024.01.29 |
[SWEA/Java] 8382. 방향 전환 (0) | 2024.01.20 |
Comments