기몽수
코딩 기록일지
기몽수
전체 방문자
오늘
어제
  • 분류 전체보기 (443)
    • 알고리즘 - SWEA (210)
      • D1 (19)
      • D2 (25)
      • D3 (143)
      • D4 (21)
      • D5 (2)
    • 알고리즘 - Programmers (74)
      • Unrated (34)
      • Lv 0 (4)
      • Lv 1 (3)
      • Lv 2 (32)
      • Lv 3 (1)
    • 알고리즘 - Baekjoon (158)
      • Bronze (1)
      • Silver (65)
      • Gold (90)
      • Platinum (2)
    • 취업 (0)
    • SSAFY (1)
hELLO · Designed By 김용수.
기몽수

코딩 기록일지

알고리즘 - SWEA/D4

[SW expert Academy] SWEA 1249번 보급로 자바(Java)

2023. 11. 18. 14:53

[D4] [S/W 문제해결 응용] 4일차 - 보급로 - 1249

문제 링크

성능 요약

메모리: 41,160 KB, 시간: 197 ms, 코드길이: 1,202 Bytes

제출 일자

2023-11-18 14:52

 

풀이 방법

1. 상하좌우 어디로든 이동 가능하다. 더 빠른 경로가 존재 할 수 있음

2. -1로 배열을 초기화해준 뒤 첫 방문이거나, 더 적은 시간을 소비해서 갈 수 있다면 큐에 넣어준다.

출처: SW Expert Academy, https://swexpertacademy.com/main/code/problem/problemList.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

import java.util.Queue;
import java.util.LinkedList;
import java.io.InputStreamReader;
import java.io.BufferedReader;

class Solution {
    // 지도를 저장 할 map
    static int[][] map;
    // 방문하는데 필요한 시간이 저장 될 visit
    static int[][] visit;
    // 상하좌우
    static int[] dirX = {-1,1,0,0};
    static int[] dirY ={0,0,-1,1};
    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int T = Integer.parseInt(br.readLine());
        for(int tc = 1; tc <= T; tc++) {
            int n = Integer.parseInt(br.readLine());
            map = new int[n][n];
            visit = new int[n][n];
            for(int i = 0; i < n; i++){
                String line = br.readLine();
                for(int j = 0; j < n; j++){
                    map[i][j] = line.charAt(j) - '0';
                    // visit 배열은 0값을 가질 수 있으므로 -1로 초기화해준다.
                    visit[i][j] = -1;
                }
            }
            bfs();
            sb.append("#" + tc + " " + visit[n-1][n-1]).append("\n");
        }
        System.out.println(sb);
    }
    private static void bfs(){
        Queue<int[]> queue = new LinkedList<>();
        // 시작 지점 저장 후 0 넣어줌
        queue.offer(new int[]{0, 0});
        visit[0][0] = 0;

        while(!queue.isEmpty()){
            int[] cur = queue.poll();
            int curTime = visit[cur[0]][cur[1]];

            for(int i = 0; i < dirX.length; i++){
                int nX = cur[0] + dirX[i];
                int nY = cur[1] + dirY[i];

                // 범위밖인 경우
                if(check(nX, nY)){
                    continue;
                }

                // 처음 방문했거나 기존 방문시간보다 작은 경로 복구 시간을 가질 경우
                if(visit[nX][nY] == -1 || (visit[nX][nY] > curTime + map[nX][nY])){
                    visit[nX][nY] = curTime + map[nX][nY];
                    queue.offer(new int[]{nX, nY});
                }
            }
        }
    }

    private static boolean check(int nX, int nY) {
        return nX < 0 || nX >= map.length || nY < 0 || nY >= map[nX].length;
    }
}

'알고리즘 - SWEA > D4' 카테고리의 다른 글

[SW expert Academy] SWEA 1210번 Ladder1 자바(Java)  (0) 2023.11.18
[SW expert Academy] SWEA 2819번 격자판의 숫자 이어 붙이기 자바(Java)  (0) 2023.11.18
[SW expert Academy] SWEA 1226번 미로1 자바(Java)  (1) 2023.11.18
[SW expert Academy] SWEA 3752번 가능한 시험 점수 자바(Java)  (0) 2023.11.16
[SW expert Academy] SWEA 1232번 사칙연산 자바(Java)  (0) 2023.11.16
    '알고리즘 - SWEA/D4' 카테고리의 다른 글
    • [SW expert Academy] SWEA 1210번 Ladder1 자바(Java)
    • [SW expert Academy] SWEA 2819번 격자판의 숫자 이어 붙이기 자바(Java)
    • [SW expert Academy] SWEA 1226번 미로1 자바(Java)
    • [SW expert Academy] SWEA 3752번 가능한 시험 점수 자바(Java)
    기몽수
    기몽수

    티스토리툴바