베오
DCode
베오
전체 방문자
오늘
어제
  • 분류 전체보기 (218)
    • 공지사항 (1)
    • 잡설 (1)
    • Programming (33)
      • [C] (1)
      • [Java] (4)
      • [Python] (2)
      • [Android] (2)
      • [Network] (0)
      • [Operation System] (2)
      • [Spring Boot] (22)
      • [Docker] (0)
    • Algorithm (31)
      • 자료구조 (2)
      • 알고리즘 (Java) (14)
      • 알고리즘 (기초) (15)
    • Coding Test (131)
      • BOJ (131)
      • Algospat (0)
    • 이론적인거 (14)
      • 보안 (5)
      • 오류 해결 (2)
      • 디자인 패턴 (5)
      • 네트워크 (1)
      • 기타 (1)
    • 최신기술 (4)
      • 블록체인 (1)
    • [Project] (1)

블로그 메뉴

  • 🐈‍⬛ GitHub
  • 📫 방명록
  • 🔖 태그

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
베오

DCode

Algorithm/알고리즘 (Java)

8/12 (목) 자바 코딩 스터디

2021. 8. 14. 17:51
2618 경찰차
9251 LCS
10164 격자상의 경로
2839 설탕 배달
1010 다리 놓기

1010번 다리 놓기

강 서쪽에서 동쪽으로 다리를 잇는 프로그램
다리끼리는 서로 겹쳐질 수 없다.

결국에는 강 동쪽의 구역(M) 중 강 서쪽의 구역(N)만큼을 순서 상관 없이 뽑는 경우의 수 를 출력하는 프로그램이다.

첫 번째는 간단 수학식으로 해결해 보았다.

1. 다이나믹 프로그래밍

C(3, 2) = c(2, 1) + c(2, 2)
= C(1, 0)+C(1, 1) + C(1, 1)+C(1, 2)

C(M, N) = C(M-1, N-1) + C(M-1, N)
nCr = n-1Cn-1 + n-1Cn;

    public static int buildBridge2(int n, int r) {
        if (n == r) {
            return 1;
        }

        if (r == 1) {
            return n;
        }

        if (cache[n][r] != -1) {
            return cache[n][r];
        }

        cache[n][r] = buildBridge2(n - 1, r - 1) + buildBridge2(n - 1, r);

        return cache[n][r];
    }

2. 단순 계산하는 방법

nCr = n!/((n-r)! * r!) 을 이용

public static long fac(int n) {
        if (n <= 1) {
            return 1;
        }
        return n * fac(n - 1);
    }

    // nCr = n! / ((n-r)! * r!);
    public static long calNCR(int n, int r) {

        System.out.println(fac(n));
        long nCr = fac(n) / fac(n - r);
        nCr /= fac(r);
        return nCr;
    }

M개 중에서 N개 순서를 생각하지 않고 뽑기

재귀 없이?

2839번 설탕 배달

sugar //5

#수학식
남은 사탕을 3으로 나눈다

그다음 개수가 맞아 떨어지면 종료

아니면 5개짜리 묶음을 하나 해제하고
3개짜리로 다시 묶는다

5개 짜리 묶음의 값이 -1이라면
종료

#DP
Arrays.fill(dp, 100000);
dp 를 100000로 다 초기화

LCS
알고리즘

백트래킹 방식

10164번 격자상의 경로

9251번 LCS

2618 경찰차

'Algorithm > 알고리즘 (Java)' 카테고리의 다른 글

[Java] 위상정렬 알고리즘  (0) 2021.09.13
[Java] 다익스트라(Dijkstra) 알고리즘  (0) 2021.09.06
8/5 (목) 자바 코딩 스터디  (0) 2021.08.14
7/29(목) 자바 코딩 스터디  (0) 2021.08.14
7/22 (목) 자바 코딩 스터디  (0) 2021.08.14
    'Algorithm/알고리즘 (Java)' 카테고리의 다른 글
    • [Java] 위상정렬 알고리즘
    • [Java] 다익스트라(Dijkstra) 알고리즘
    • 8/5 (목) 자바 코딩 스터디
    • 7/29(목) 자바 코딩 스터디
    베오
    베오

    티스토리툴바