본문 바로가기

알고리즘90

Algorithm - 알리바바와 40인의 도둑(동적 계획법) 알고리즘 입문 수업을 듣고 중요한 내용을 정리했습니다. 개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다. 문제 [알리바바와 40인의 도둑(동적 계획법)] 알리바바는 40인의 도둑으로부터 금화를 훔쳐 도망치고 있다. 알리바바는 평소에 잘 가지 않던 계곡의 돌다리로 도망가고자 한다. 계곡의 돌다리는 N*N개의 돌로 구성되어 있으며, 각 돌다리들은 높이가 서로 다르다. 해당 돌다리를 건널 때 돌의 높이만큼 에너지가 소비되며, 반드시 최단거리로 이동한다. 즉, 현재지점에서 오른쪽 또는 아래쪽으로만 이동해야 한다. N*N의 계곡 돌다리 격자정보가 주어지면, (1, 1)에서 (N, N)까지 가는데 드는 에너지의 최소량을 구하는 프로그램을 작성하시오. 만약, 위의 예시처럼 N=3인 돌.. 2022. 2. 4.
Algorithm - 가장 높은 탑 쌓기(LIS 응용) 알고리즘 입문 수업을 듣고 중요한 내용을 정리했습니다. 개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다. 문제 [가장 높은 탑 쌓기(LIS 응용)] 밑면이 정사각형인 직육면체 벽돌을 사용하여 탑을 쌓고자 한다. 탑은 벽돌을 한 개씩 아래에서 위로 쌓으면서 만들어 간다. 아래의 조건을 만족하면서 가장 높은 탑을 쌓을 수 있는 프로그램을 작성하시오. (조건 1) 벽돌은 회전시킬 수 없다. 즉, 옆면을 밑면으로 사용할 수 없다. (조건 2) 밑면의 넓이가 같은 벽돌은 없으며, 무게가 같은 벽돌도 없다. (조건 3) 벽돌들의 높이는 같을 수 있다. (조건 4) 탑을 쌓을 때, 밑면이 좁은 벽돌 위에 밑면이 넓은 벽돌을 놓을 수 없다. (조건 5) 무게가 무거운 벽돌을 무게가 가벼.. 2022. 2. 3.
Algorithm - 최대 선 연결하기(LIS 응용) 알고리즘 입문 수업을 듣고 중요한 내용을 정리했습니다. 개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다. 문제 [최대 선 연결하기(LIS 응용)] 왼쪽의 번호와 오른쪽의 번호가 있는 그림에서 같은 번호끼리 선으로 연결하려고 한다. 왼쪽 번호는 무조건 위에서부터 차례로 1부터 N까지 오름차순으로 나열되어 있다. 오른쪽의 번호 정보가 위에서부터 아래로 주어질 때, 선이 서로 겹치지 않고 최대 몇 개의 선을 연결할 수 있을지 구하는 프로그램을 작성하시오. 위의 그림은 오른쪽 번호 정보가 4, 1, 2, 3, 9, 7, 5, 6, 10, 8로 입력되어 있을 때, 선이 서로 겹치지 않고 연결할 수 있는 선의 최대 값(6개)을 구한 경우이다. *입력 설명 첫 번째 줄에는 자연수 N(.. 2022. 2. 3.
Algorithm - 최대 부분 증가수열(LIS : Longest Increasing Subsequence) 알고리즘 입문 수업을 듣고 중요한 내용을 정리했습니다. 개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다. 문제 [최대 부분 증가수열(LIS)] N개의 자연수로 이루어진 수열이 주어졌을 때, 그 중에서 가장 길게 증가하는(작은 수에서 큰 수로) 원소들의 집합을 찾는 프로그램을 작성하시오. (단, 원수열의 원소 순서는 그대로 유지해야 함) 예를 들어, 주어진 수열의 원소가 2, 7, 5, 8, 6, 4, 7, 12, 3 이고 가장 길게 증가하도록 원소들을 차례대로 뽑아내면 2, 5, 6, 7, 12를 뽑아내어 길이가 5인 최대 부분 증가수열을 만들 수 있다. *입력 설명 첫 번째 줄에 입력되는 데이터의 수인 자연수 N(2 ≤ N ≤ 1,000)이 주어진다. 두 번째 줄에는 N.. 2022. 2. 3.
Algorithm - 돌다리 건너기(동적 계획법) 알고리즘 입문 수업을 듣고 중요한 내용을 정리했습니다. 개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다. 문제 [돌다리 건너기(동적 계획법)] 철수는 학교에 가는데 개울을 만났다. 개울은 N개의 돌로 다리를 만들어 놓았으며, 철수는 돌 다리를 건널 때 한 번에 한 칸 또는 두 칸씩 돌다리를 건널 수 있다. 철수가 개울을 완전히 건너는 방법의 수를 출력하는 프로그램을 작성하시오. *입력 설명 첫 번째 줄에 돌의 개수인 자연수 N(3 ≤ N ≤45)이 주어진다. *출력 설명 첫 번째 줄에 개울을 건너는 방법의 수를 출력한다. 풀이(Python) 답안(1) : Bottom-Up import sys sys.stdin = open('AA/input_75.txt', 'rt') n =.. 2022. 2. 2.
Algorithm - 계단 오르기(동적 계획법) 알고리즘 입문 수업을 듣고 중요한 내용을 정리했습니다. 개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다. 문제 [계단 오르기(동적계획법)] 철수는 계단을 오를 때, 한 번의 한 계단 또는 두 계단씩 올라간다. 만약, 총 4개의 계단을 올라간다면 그 방법의 수는 1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2로 5가지이다. 철수가 총 N개의 계단을 올라갈 때, 올라갈 수 있는 모든 방법의 수를 구하는 프로그램을 작성하시오. *입력 설명 첫 번째 줄에 계단의 개수인 자연수 N(3 ≤ N ≤45)이 주어진다. *출력 설명 첫 번째 줄에 올라가는 방법의 수를 출력한다. 풀이(Python) 답안(1) : Bottom-Up import sys sys.stdin = ope.. 2022. 2. 2.