광규니
광규니네
광규니
전체 방문자
오늘
어제
  • 분류 전체보기 (154)
    • 알고리즘 (100)
      • 알고리즘 개념 (2)
      • 문제 풀이 (96)
    • 주절주절 (19)
      • 자격증, 활동 후기 (4)
      • 전시회 후기 (3)
      • 이모저모 (2)
      • 회고 (3)
      • 뜨럼 (7)
    • 운영체제 (9)
    • 개발 지식 (9)
      • Apple Watch (4)
      • MySQL (2)
      • Eclipse (1)
      • XCode (1)
    • 네트워크 공부 (1)
    • 데이터베이스 공부 (5)
    • Java 공부 (7)
    • TMP (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 드린이
  • 백준
  • 개념
  • BOJ
  • 프로그래머스
  • 오블완
  • 애플워치 앱 만들기
  • 컴퓨터 사이언스
  • OS
  • 다이나믹 프로그래밍
  • 애플워치 앱
  • 티스토리챌린지
  • 파이썬
  • 합주
  • 운영체제
  • 알고리즘
  • DP
  • BFS
  • 구현
  • 자바

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
광규니

광규니네

알고리즘/문제 풀이

[Java/자바 백준 16928] 뱀과 사다리 게임

2022. 3. 27. 16:41
반응형

풀이

우선 최솟값을 위해 BFS를 사용했습니다.

 

1차원 배열을 길이가 100으로 선언하고 0으로 초기화 해줍니다.

해당 인덱스에 사다리나 뱀이 있다면 이동하게되는 위치를 넣어주고

0에서부터 큐에 삽입하여 게임을 시작합시다 !

 

1~6에 주사위에 따라 전진하면서

해당값을 방문했는지, 범위에 벗어나지 않는지, 배열에 사다리, 뱀이 있는지 판단해주며

 

100에 도달시 (배열이라 인덱스는 99입니다)  걸린 시간을 출력해주면 되는 문제 입니다 !

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

public class Main{
	static int[] map;
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		map = new int[100];
		
		//사다리 
		int N = Integer.parseInt(st.nextToken());
		//뱀 
		int M = Integer.parseInt(st.nextToken());
		for(int i = 0 ; i < N ; i++) {
			st = new StringTokenizer(br.readLine());
			int start = Integer.parseInt(st.nextToken());
			int end = Integer.parseInt(st.nextToken());
			
			map[start - 1] = end - 1;
		}
		
		for(int i = 0 ; i < M ; i++) {
			st = new StringTokenizer(br.readLine());
			int start = Integer.parseInt(st.nextToken());
			int end = Integer.parseInt(st.nextToken());
			
			map[start - 1] = end - 1;
		}
		
		bfs();
		
	}
	private static void bfs() {
		Queue<Integer> queue = new LinkedList<Integer>();
		boolean[] visited = new boolean[100];
		
		queue.offer(0);
		visited[0] = true;
		int time = 0;
		while(! queue.isEmpty()) {
			time ++;
			int size = queue.size();
			for(int i = 0 ; i < size ; i++) {				
				int cur = queue.poll();
				for(int plus = 1 ; plus <= 6 ; plus ++) {
					int nx = cur + plus;
					
					if(0 > nx || nx > 99 || visited[nx]) continue;
					// 목적지 도착 할때 
					if(nx == 99) {
						queue.clear();
						System.out.println(time);
						return;
					}
					// 사다리나 뱀이 없을때 
					if(map[nx] == 0) {						
						queue.add(nx);
						visited[nx] = true;
						
					}
					// 사다리나 뱀이 있을때 방문한 값이 아니라면 큐에 삽입  
					else {
						if(visited[map[nx]]) continue;
						queue.add(map[nx]);
						visited[map[nx]] = true;
						
					} 	
				}
			}
		}
	}
}
반응형
저작자표시 (새창열림)

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

[Java/자바 백준 1781] 컵라면  (0) 2022.03.29
[Java/자바 백준 23290] 마법사 상어와 복제  (0) 2022.03.28
[Java/자바 백준 16954] 움직이는 미로 탈출  (0) 2022.03.11
[Java/자바 백준 1976] 여행가자  (0) 2022.03.09
[Java/자바 백준 17406] 배열돌리기 4  (0) 2022.03.08
    '알고리즘/문제 풀이' 카테고리의 다른 글
    • [Java/자바 백준 1781] 컵라면
    • [Java/자바 백준 23290] 마법사 상어와 복제
    • [Java/자바 백준 16954] 움직이는 미로 탈출
    • [Java/자바 백준 1976] 여행가자
    광규니
    광규니
    공부 및 일상 올리기~

    티스토리툴바