쵼쥬
쵼쥬의 개발공부 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)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쵼쥬

쵼쥬의 개발공부 TIL

뱀과 사디리 게임 - 16928번
코딩테스트/[백준] 코딩테스트 연습

뱀과 사디리 게임 - 16928번

2021. 10. 27. 13:20


풀이 방법

bfs를 이용해서 최단 경로를 구해주었다. 현재 위치와 위치에 도달하기까지 굴린 주사위 횟수를 가진 클래스를 만들어 주었다. map에는 뱀과 사다리 경로를 넣어주었는데 굳이 따로 나눌 필요없이 한번에 넣어주었다. 판의 크기가 100으로 고정된것이 아니기 때문에 배열을 이용해서 boolean을 체크해서 방문된 곳을 확인하는 것보다는 set을 이용해서 방문했던 위치를 확인해 주었다.

 

내 코드

package com.company;

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 = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        HashSet<Integer> set  = new HashSet<>();
        HashMap<Integer, Integer> map = new HashMap<>();

        for (int i = 0; i < N + M; i++) {
            st = new StringTokenizer(br.readLine());
            int key = Integer.parseInt(st.nextToken());
            int value = Integer.parseInt(st.nextToken());
            map.put(key, value);
        }

        Queue<Node> q = new LinkedList<>();
        q.add(new Node(1, 0));
        set.add(1);

        while (!q.isEmpty()) {
            Node current = q.poll();

            if(current.getIndex() == 100){
                System.out.println(current.getCount());
                break;
            }

            for (int i = 1; i <= 6; i++) {
                int index = map.getOrDefault(current.getIndex() + i, current.getIndex() + i);
                if(set.contains(index))
                    continue;
                set.add(index);
                q.add(new Node(index, current.getCount() + 1));
            }
        }
    }
}

class Node {
    private int index;
    private int count;

    Node(int index, int count) {
        this.index = index;
        this.count = count;
    }

    public int getIndex() {
        return index;
    }

    public int getCount() {
        return count;
    }
}

 

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

특정한 최단 경로 - 1504번  (0) 2021.11.01
독서실 거리두기 - 20665번  (0) 2021.10.27
택배 - 1719번  (0) 2021.10.26
점수따먹기 - 1749번  (0) 2021.10.25
색종이와 가위 - 20444번  (0) 2021.10.25
    '코딩테스트/[백준] 코딩테스트 연습' 카테고리의 다른 글
    • 특정한 최단 경로 - 1504번
    • 독서실 거리두기 - 20665번
    • 택배 - 1719번
    • 점수따먹기 - 1749번
    쵼쥬
    쵼쥬

    티스토리툴바