developer-ellen
인간 디버거의 로그 찍기
developer-ellen
전체 방문자
오늘
어제
  • 분류 전체보기 (217)
    • 회고록 (0)
    • 취뽀 및 커리어 여정의 Stack (2)
      • SSAFY 7기 (2)
    • 프로그래밍공부 (24)
      • c++ (0)
      • JAVA (3)
      • Spring (5)
      • design pattern (3)
      • BackDB (1)
      • Servlet&JSP (3)
      • Vue (4)
      • JPA (4)
      • Infra (1)
      • Linux (0)
    • AI (3)
      • papers (3)
      • trend (0)
    • 프로젝트진행 (0)
      • 데이터베이스 (0)
      • 서버개발 (0)
      • 인공지능 (0)
      • 하루정리 (0)
    • 포트폴리오 (0)
    • 알고리즘 (158)
      • 알고리즘문풀 (155)
      • 알고리즘공부 (3)
    • 통계공부 (15)
      • 시계열분석 (15)
      • 회귀분석 (0)
    • CS (14)
      • 컴퓨터네트워크 (4)
      • 운영체제 (8)
      • 데이터베이스 (2)
    • 주저리주저리 (0)
      • 필사 (0)
    • 취업관련정보 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Arima
  • 삼성코테파이썬준비
  • ARIMA모형
  • SW역량테스트파이썬
  • 삼성코테자바준비
  • 삼성코테파이썬
  • 통계분석
  • SW역량테스트파이썬풀이
  • 카카오코테
  • 코테파이썬
  • AR모형
  • 시계열
  • 삼성코테파이썬풀이
  • BOJ파이썬풀이
  • 데이터분석
  • 삼성코테기출자바풀이
  • 카카오코테java풀이
  • 삼성코테자바풀이
  • 삼성코테자바꿀팁
  • 삼성코테기출
  • 삼성코테준비
  • 백준파이썬풀이
  • 운영체제인터럽트
  • MA모형
  • 통계학
  • 시계열분석
  • 삼성코테구현풀이
  • 삼성코테구현문제추천
  • c++ 빌더 패턴
  • c++디자인패턴

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
developer-ellen

인간 디버거의 로그 찍기

알고리즘/알고리즘문풀

SWEA - 보급로 1249번 (JAVA)

2022. 4. 7. 13:18

❓ 문제 - SWEA 보급로 1249번 - JAVA 풀이법

 

출처 

(https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15QRX6APsCFAYD)

 

 

📝 문제해결법

1. 이 문제는 DP + BFS로 풀이했다.

  • BFS 내에서 visited라는 2차원 배열을 만들어서 방문체크와 동시에 DP로 활용했다.
  • 인접한 네 곳을 방문할 때는 기존 지나갔던 비용보다 현재 비용이 더 적을 경우에만 그곳을 방문할 수 있게 구현하였다.
  • 그리고 큐에서 꺼낸 노드가 도착치 노드인 경우 출발지부터 도착지까지 걸리는 비용들을 최솟값으로 계속 갱신한 후 답으로 출력할 수 있게 구현했다.

2. 느낀점

  • 처음에 조금 더 효율적으로 풀어보고자 플로이드워셜인가..? 하면서 접근했지만 아무리봐도 BFS였고.. DP를 활용해서 풀었다.

 

💻 소스코드

// SWEA - 보급로(1249번)
// BFS

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


public class Solution_1249 {
	public static int n;
	public static int[][] map;
	public static int[] dx = {-1, 1, 0, 0};
	public static int[] dy = {0, 0, -1, 1};

	public static class Node {
		int x;
		int y;
		int dis;
		public Node(int x, int y, int dis) {
			this.x = x;
			this.y = y;
			this.dis = dis;
		}
	}

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		int TC = Integer.parseInt(br.readLine());
		for(int test_case=1;test_case<=TC;test_case++){
			n = Integer.parseInt(br.readLine());
			map = new int[n][n];

			for(int i=0;i<n;i++) {
				String[] data = br.readLine().split("");
				for(int j=0;j<n;j++) {
					map[i][j] = Integer.parseInt(data[j]);
				}
			}
			int ans = bfs();
			sb.append("#"+test_case).append(" ").append(ans).append("\n");
		}

		System.out.println(sb.toString());

	}

	public static int bfs() {
		int[][] visited = new int[n][n];
		for(int i=0;i<n;i++) {
			Arrays.fill(visited[i], Integer.MAX_VALUE);
		}
		Queue<Node> q = new LinkedList<Node>();
		visited[0][0] = 0;
		q.offer(new Node(0, 0, 0));
		int dis = Integer.MAX_VALUE;
		while(!q.isEmpty()) {
			Node node = q.poll();
			if(node.x == n-1 && node.y == n-1) {
				dis = Math.min(dis, node.dis);
				continue;
			}

			for(int d=0;d<4;d++) {
				int nx = node.x + dx[d];
				int ny = node.y + dy[d];
				if(0 <= nx && nx < n && 0 <= ny && ny < n) {
					int distance = node.dis + map[nx][ny];
                    // 만약 이미 지나갔던 최단비용보다 더 작은 비용으로 지나갈 수 있다면
                    // 값을 갱신해주고 Queue에 넣어주는 부분
					if(visited[nx][ny] > distance) {
						visited[nx][ny] = distance;
						q.add(new Node(nx, ny, distance));
					} 
				}
			}
		}

		return dis;

	}

}

'알고리즘 > 알고리즘문풀' 카테고리의 다른 글

BOJ - 연구소 14502번 (JAVA)  (0) 2022.04.08
BOJ - 2048(Easy) 12100번 (JAVA)  (0) 2022.04.08
BOJ - 정복자 14950번 (JAVA)  (0) 2022.03.17
BOJ - 나만 안되는 연애 14621번 (JAVA)  (0) 2022.03.15
BOJ - 괄호 추가하기 16637번 (JAVA)  (0) 2022.03.14
    '알고리즘/알고리즘문풀' 카테고리의 다른 글
    • BOJ - 연구소 14502번 (JAVA)
    • BOJ - 2048(Easy) 12100번 (JAVA)
    • BOJ - 정복자 14950번 (JAVA)
    • BOJ - 나만 안되는 연애 14621번 (JAVA)
    developer-ellen
    developer-ellen

    티스토리툴바