본문 바로가기

Algorithm19

조합의 경우수(메모이제이션) 1. 문제 설명조합의 경우수는 일반적으로 다음과 같은 공식을 이용해 계산한다.하지만 이 공식 대신 재귀와 메모이제이션을 활용한 방식으로 조합수를 구하는 프로그램을 작성해보자. 2. 공식조합수는 다음과 같은 재귀적 성질을 가진다.즉, n개의 원소에서 r개를 선택하는 경우는 n-1개의 원소에서 r-1개를 선택하는 경우와 n-1개의 원소에서 r개를 선택하는 경우의 합으로 계산된다.이 공식에 따라 재귀를 이용하여 조합수를 구할 수 있다. 3. 입력첫째 줄에 자연수 n(3 ≤ n ≤ 33)과 r(0 ≤ r ≤ n)이 주어진다. 4. 출력첫째 줄에 조합수를 출력한다. 5. 코드 설명package com.example.codingtest;import java.io.BufferedReader;import java.io.. 2024. 10. 18.
순열 구하기(DFS) 설명10 이하의 N개의 자연수가 주어졌을 때, 이 중 M개를 뽑아 일렬로 나열하는 모든 경우의 수(순열)를 출력하는 문제이다. 이때 출력은 사전순으로 오름차순으로 정렬된 결과를 제공해야 한다. 입력 설명첫 번째 줄에 자연수 N(3두 번째 줄에 N개의 자연수가 오름차순으로 주어진다.출력 설명첫 번째 줄에 모든 경우의 순열을 출력한다.출력되는 순서는 사전순으로 오름차순이다.예시 입력3 23 6 9  예시 출력3 63 96 36 99 39 6 풀이 과정입력된 자연수 배열에서 M개를 선택해 순서대로 나열하는 순열을 구한다.DFS(깊이 우선 탐색) 방법을 이용하여 순열을 구하며, 선택된 숫자가 다시 선택되지 않도록 체크 배열을 사용한다.모든 경우의 순열을 탐색하여 조건을 만족하면 출력한다.D(0)├── i = 0.. 2024. 10. 18.
동전교환(DFS) 설명여러 단위의 동전들이 주어졌을 때, 거스름돈을 가장 적은 수의 동전으로 교환하는 방법을 찾는 문제이다. 각 단위의 동전은 무한정 사용할 수 있다. 입력첫 번째 줄에 동전의 종류 개수 N(1두 번째 줄에는 N개의 동전 종류가 주어지고, 그다음 줄에 거슬러 줄 금액 M(1각 동전의 종류는 100원을 넘지 않는다.출력거슬러 줄 동전의 최소 개수를 출력한다.예시 입력31 2 515 예시 출력3 풀이 방법이 문제는 DFS(깊이 우선 탐색)를 이용하여 모든 가능한 경우의 수를 탐색한 후, 가장 적은 동전 개수를 찾아 해결할 수 있다. 큰 단위의 동전부터 사용하면서 탐색을 진행하고, 중간에 이미 답이 되는 경우보다 더 많은 동전을 사용하게 되는 경우는 탐색을 종료시켜 효율성을 높인다.package com.exam.. 2024. 10. 18.
합이 같은 부분집합(DFS : 아마존 인터뷰) 이 문제는 주어진 자연수 집합을 두 개의 부분집합으로 나누었을 때, 두 부분집합의 원소 합이 같은 경우가 존재하는지를 확인하는 문제이다. 각 부분집합은 서로소여야 하며, 두 부분집합을 합하면 원래 집합이 되어야 한다. 문제 설명주어진 N개의 자연수 집합을 두 개의 부분집합으로 나누었을 때, 두 부분집합의 합이 같으면 "YES"를 출력하고, 그렇지 않으면 "NO"를 출력하는 프로그램을 작성한다.예를 들어, {1, 3, 5, 6, 7, 10}이라는 집합이 주어졌다면, 이를 {1, 3, 5, 7}과 {6, 10}으로 나누면, 두 부분집합의 합이 각각 16이 되어 답은 "YES"가 된다.입력 설명첫 번째 줄에 자연수 N(1 ≤ N ≤ 10)이 주어진다.두 번째 줄에는 집합의 원소 N개가 주어진다. 각 원소는 중.. 2024. 10. 18.
경로탐색(DFS, 인접리스트) 이 문제는 방향 그래프에서 1번 정점에서 시작하여 N번 정점까지 가는 모든 경로의 수를 구하는 문제이다. 이 문제를 해결하기 위해 DFS(깊이 우선 탐색)과 인접 리스트를 사용한다. 이 방식은 그래프를 효율적으로 탐색하고, 경로의 수를 빠르게 구할 수 있다. 문제 해결 접근1. 그래프의 표현그래프는 정점과 간선으로 이루어진 자료 구조이다. 이 문제에서는 방향 그래프로, 정점에서 다른 정점으로 갈 수 있는 방향이 정해져 있다.그래프는 인접 리스트를 사용하여 표현한다. 이는 ArrayList를 이용해 각 정점에서 연결된 다른 정점들을 리스트 형태로 저장하는 방식이다.2. DFS(깊이 우선 탐색)DFS는 한 경로씩 끝까지 탐색하며, 마지막 정점(N번 정점)에 도달할 때마다 경로의 수를 카운트한다.각 경로를 탐.. 2024. 10. 18.
[BFS] 송아지 찾기 BFS(너비 우선 탐색)를 활용한 송아지 찾기 문제를 풀어본다. 이 문제는 수빈이가 동생 송아지를 찾기 위해 이동하는 최단 거리를 구하는 문제다. 수빈이는 현재 위치에서 1칸 앞, 1칸 뒤, 5칸 앞의 세 가지 이동 옵션을 가질 수 있다. 주어진 출발지에서 목적지까지 도달하는 가장 빠른 방법을 BFS로 찾는 과정이다. 문제 설명수빈이가 현재 있는 위치 s에서 동생 송아지가 있는 위치 e까지 최단 경로를 찾아야 한다.수빈이는 매번 1칸 앞으로, 1칸 뒤로, 또는 5칸 앞으로 이동할 수 있다.수빈이가 송아지에게 도달하는 최소 이동 횟수를 출력하는 문제이다.해결 방법이 문제는 최단 거리를 찾는 문제이므로 BFS를 사용하는 것이 적합하다. BFS는 각 단계에서 가능한 모든 경로를 탐색하면서 최단 경로를 찾기 때.. 2024. 10. 17.