chaesoo
so0ob
chaesoo
전체 방문자
오늘
어제
  • 분류 전체보기 (169)
    • 알고리즘 (157)
      • 백준 다시풀기 (8)
      • solved.ac (137)
      • 백준 알고리즘 공부 (12)
    • 활동일지 (5)
    • 개발 (5)
      • Unity (4)
    • 책 공부 (2)
      • clean code (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 구현
  • 게임개발
  • 정보처리기사 2021 합격률
  • 최단거리알고리즘
  • C++
  • 디스코드 봇 파이썬
  • 분할정복
  • 로스트아크 디코 봇
  • 백준
  • dfs
  • 백준미세먼지안녕!
  • 디코 봇
  • 소마13기
  • 유니티
  • BFS
  • DP
  • 디코봇 파이썬
  • 클린코드2장
  • 알고리즘
  • 백준2448
  • 자료구조
  • 다시풀기
  • 로아 디코봇
  • 클린코드
  • solved.ac
  • 플로이드-와샬
  • SW마에스트로 13기
  • 분할정복거듭제곱
  • 문자열
  • 다익스트라

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
chaesoo

so0ob

알고리즘/solved.ac

[class4] (백준 12851) 숨바꼭질 2

2022. 2. 10. 13:13

문제

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.

수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 그리고, 가장 빠른 시간으로 찾는 방법이 몇 가지 인지 구하는 프로그램을 작성하시오.

입력

첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.

출력

첫째 줄에 수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.

둘째 줄에는 가장 빠른 시간으로 수빈이가 동생을 찾는 방법의 수를 출력한다.

제한

예제 입력 1

5 17

예제 출력 1

4
2

힌트

 

 

#include <iostream>
#include <queue>
using namespace std;

bool visited[100001];
int minTime = -1;
int visitNum = 0;

int BFS(int N, int goal)
{
    queue<pair<int,int>> q;
    q.push(make_pair(N,0));
    visited[N] = true;
    while (!q.empty())
    {
        int temp = q.front().first;
        int sec = q.front().second;
        visited[temp] = true;
        q.pop();

        if (minTime == -1 && temp == goal)
        {
            minTime = sec;
            visitNum++;
        }
        else if (minTime == sec && temp == goal)
        {
            visitNum++;
        }

        if ((temp + 1) >= 0 && (temp + 1) < 100001 && !visited[temp + 1])
        {
            q.push(make_pair(temp + 1, sec+1));
        }
        if ((temp - 1) >= 0 && (temp - 1) < 100001 && !visited[temp - 1])
        {
            q.push(make_pair(temp - 1, sec + 1));
        }
        if ((temp * 2) >= 0 && (temp * 2) < 100001 && !visited[temp * 2])
        {
            q.push(make_pair(temp * 2, sec + 1));
        }
    }
    return 0;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int N, K;
    cin >> N >> K;
    BFS(N, K);
    cout << minTime << '\n'<<visitNum;
    return 0;
}
728x90
반응형

'알고리즘 > solved.ac' 카테고리의 다른 글

[class4] (백준 13549) 숨바꼭질 3  (0) 2022.02.12
[class4] (백준 12865) 평범한 배낭  (0) 2022.02.11
[class4] (백준 9663) N-Queen  (0) 2022.02.06
[class4] (백준 9251) LCS  (0) 2022.02.05
[class4] (백준 1916) 최소비용 구하기  (0) 2022.02.04
    '알고리즘/solved.ac' 카테고리의 다른 글
    • [class4] (백준 13549) 숨바꼭질 3
    • [class4] (백준 12865) 평범한 배낭
    • [class4] (백준 9663) N-Queen
    • [class4] (백준 9251) LCS
    chaesoo
    chaesoo

    티스토리툴바