우물을 기어오르는 달팽이 (난이도: 하)

2022. 10. 4. 12:57·알고리즘 (with JAVA)/동적 계획법

1. 문제 설명

(1) 깊이가 N미터인 우물의 맨 밑바닥에 달팽이가 있다.

 

(2) 달팽이는 우물의 맨 위까지 기어올라가고 싶어하는데, 달팽이의 움직임은 그 날의 날씨에

좌우된다.

 

(3) 날이 맑으면 하루에 2미터를 기어올라갈 수 있지만, 비가 내리면 1미터 밖에 올라가지 못한다.

* 날이 맑거나 비가 올 확률은 각각 50%이다.

 

(4) 앞으로 M일 안에 달팽이가 우물 끝까지 올라갈 확률을 찾는 프로그램을 작성하시오.

 

 

 

 

 

2. 입출력 조건 및 예제

입력 조건

X

 

출력 조건

X

 

 

입력 예제

3
3 5
3 6
5 8

 

출력 예제

0.5

0.125

0.5

 

 

 

 

3. 제약 조건

X

 

 

 

 

4. 가정법

X

 

 

 

 

5. 기저 사례

(1) 지정한 날짜 M까지 도달한 경우

 

 

 

 

6. 코드

public class CLIMB {
    private static BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
    private static StringBuilder sb = new StringBuilder();

    // 각각 일 수와 깊이이다.
    private static int M, N;

    private static int[][] cache;

    public static void main(String[] args) throws IOException {
        StringTokenizer st;
        int C = Integer.parseInt(sc.readLine());

        for(int i=0; i<C; i++) {
            cache = new int[101][101];
            st = new StringTokenizer(sc.readLine());

            M = Integer.parseInt(st.nextToken());
            N = Integer.parseInt(st.nextToken());
            sb.append((solve(0, 0)/Math.pow(2, M))+"\n");
        }
        System.out.println(sb);
    }
    private static int solve(int days, int climbed) {
        // 기저 사례(1): M일이 모두 지난 경우
        if(days==M) return climbed>=N ? 1:0;

        // 메모제이션
        if(cache[days][climbed] != 0) return cache[days][climbed];

        return solve(days+1, climbed+1) + solve(days+1, climbed+2);
    }
}
저작자표시 (새창열림)

'알고리즘 (with JAVA) > 동적 계획법' 카테고리의 다른 글

비대칭 타일링 (난이도: 하)  (0) 2022.10.07
장마가 찾아왔다 (난이도: 하)  (0) 2022.10.06
삼각형 위의 최대 경로 개수 세기 (난이도: 중)  (0) 2022.10.04
타일링 방법의 수 세기 (난이도: 하)  (2) 2022.10.03
양자화 (난이도: 중)  (0) 2022.10.03
'알고리즘 (with JAVA)/동적 계획법' 카테고리의 다른 글
  • 비대칭 타일링 (난이도: 하)
  • 장마가 찾아왔다 (난이도: 하)
  • 삼각형 위의 최대 경로 개수 세기 (난이도: 중)
  • 타일링 방법의 수 세기 (난이도: 하)
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      문자 기반 스트림
      역직렬화
      안정 정렬
      map()
      file
      코딩테스트
      스트림
      자바 개념
      ServerSocket
      serializable
      소켓 프로그래밍
      선택 정렬
      outputstream
      유용한 클래스
      안드로이드 스튜디오
      다형성
      InputStream
      람다식
      Arrays
      java.lang패키지
      코딩트리조별과제
      java.time 패키지
      TCP 소켓 프로그래밍
      Collections Framework
      제자리 정렬
      코드트리
      알고스팟
      불안정 정렬
      중간연산
      snail
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    우물을 기어오르는 달팽이 (난이도: 하)
    상단으로

    티스토리툴바