장마가 찾아왔다 (난이도: 하)

2022. 10. 6. 18:03·알고리즘 (with JAVA)/동적 계획법

( 이 알고리즘은 아래 링크에 이어서 진행됩니다. )

 

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

 

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

1. 문제 설명 (1) 깊이가 N미터인 우물의 맨 밑바닥에 달팽이가 있다. (2) 달팽이는 우물의 맨 위까지 기어올라가고 싶어하는데, 달팽이의 움직임은 그 날의 날씨에 좌우된다. (3) 날이 맑으면 하루

kind-coding.tistory.com

 

1. 문제 설명

(1) 앞의 문제에서는 날이 맑거나 비가 올 확률은 동일하게 50%의 확률을 가졌다.

 

(2) 그러나 여기서는 비가 올 확률을 50%에서 75%로 올라갔다고 가정한다.

 

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

 

 

 

 

2. 입출력 조건 및 예제

입력 조건

X

 

출력 조건

X

 

 

입력 예제

4
5 4
5 3
4 2
3 2

 

출력 예제

0.99609375
0.84375
0.5625
0.9375

 

 

 

 

3. 제약 조건

X

 

 

 

4. 가정법

X

 

 

 

 

5. 기저 사례

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

 

 

 

 

6. 코드

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

    private static int N, M;

    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());
            N = Integer.parseInt(st.nextToken());
            M = Integer.parseInt(st.nextToken());

            sb.append((solve(0, 0))+"\n");
        }
        System.out.println(sb);
    }

    private static double 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 0.25*solve(days+1, climbed+1) + 0.75*solve(days+1, climbed+2);
    }
}

 

 

 

7. 점화식

- 앞 문제(우물을 기어오르는 달팽이)에서는 모든  경우의 수를 계산하여 확률을 구했다면, 이 문제에서는 재귀 호출

할 때마다 직접 확률을 구한다.

저작자표시 (새창열림)

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

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

    • 링크

    • 공지사항

    • 인기 글

    • 태그

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

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    장마가 찾아왔다 (난이도: 하)
    상단으로

    티스토리툴바