본문 바로가기

전체 글219

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.
TIL - 22.02.02 개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다. 2월 2일(수) iterators iterator란? 이터레이터(iterator)는 값을 순차적으로 꺼내올 수 있는 객체이다. 특정 객체가 반복 가능한 객체인지를 확인해보는 방법은 dir로 호출하여 __iter__ 함수가 있는지 확인해보면 된다. (ex. print(dir(반복가능한 객체))) dir로 출력해보면, __iter__ 함수가 들어있는 것을 확인할 수 있고 이를 print문으로 출력해보면 이터레이터 객체임을 확인할 수 있다. 또한, 이터레이터를 변수에 저장한 후 __next__ 함수를 호출하면 for문이 동작하는 것처럼 값을 하나씩 꺼내올 수 있다. 참고로, 대표적인 이터레이터 객체로는 list, dictiona.. 2022. 2. 2.
TIL - 22.02.01 개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다. 2월 1일(화) List comprehensions List comprehension이란? 리스트 컴프리헨션은 새로운 리스트를 만들 때, 사용할 수 있는 간단한 표현식이며 리스트와 마찬가지로 대괄호를 사용하여 작성한다. 리스트 컴프리헨션은 우리가 만들려고 하는 원소를 표현하는 표현식으로 시작하여 for 루프가 뒤에 따라오는 형식을 가진다. 또한, 리스트 컴프리헨션에서 for문 뒤에 if문을 추가하여 조건문을 포함한 형식으로도 사용할 수 있다. 즉, [표현식 for 원소 in 반복가능한 객체]와 [표현식 for 원소 in 반복가능한 객체 if문]의 형식으로 사용 가능하다. 리스트 컴프리헨션으로 작성한 코드는 간결하고 데이터베.. 2022. 2. 2.