본문 바로가기

전체 글

(29)
알고리즘 정리 <다이나믹 프로그래밍> 다이나믹 프로그래밍 다이나믹 프로그래밍이란 다양한 알고리즘 문제를 푸는 상황에서 연산 속도와 메모리 공간을 최대한으로 활용할 수 있는 효율적인 알고리즘이다. 쉽게 말로 표현하자면 한 번 계산한 문제는 다시 계산하지 않도록 하는 알고리즘이다. 다이나믹 프로그래밍으로 해결할 수 있는 대표적인 예시로는 피보나치 수열이 있다. 피보나치 수열은 이전 두 항의 합을 현재의 항으로 설정하는 특징이 있는 수열이다. 1 1 2 3 5 8 13 21 34 55 89 이를 점화식으로 나타낼 수 있는데 an+2 = an+1 + an과 같이 표현할 수 있고 프로그래밍으로 표현하면 다음과 같다. [소스 코드] def fibo(x): if x == 1 or x == 2: return 1 return fibo(x-1) + fibo(..
이코테 Chapter 07 - 떡볶이 떡 만들기 문제 동빈이네 떡볶이 떡은 길이가 일정하지 않다. 대신에 한 봉지 안에 들어가는 떡의 총 길이는 절단기로 잘라서 맞춰준다. 절단기에 높이(H)를 지정하면 줄지어진 떡을 한 번에 절단한다. 높이가 H보다 긴 떡은 H위의 부분이 잘릴 것이고, 낮은 떡은 잘리지 않는다. 예를 들어, 높이가 19, 14, 10, 17 cm인 떡이 있고 절단기 높이를 15cm로 지정하면 자른 뒤 떡의 높이는 15, 14, 10, 15cm가 될 것이다. 그리고 잘린 떡의 길이는 차례대로 4, 0, 0, 2cm가 된다. 이 때 손님은 잘린 떡의 길이의 총 합인 6cm의 길이를 가져간다. 손님이 왔을 때 요청한 총 길이가 M일 때 적어도 M만큼의 떡을 얻기 위해 절단기에 설정할 수 있는 높이의 최댓값을 구하는 프로그램을 작성하시오 입..
이코테 chapter 07 이진 탐색 - 부품 찾기 문제 동빈이네 전자 매장에는 부품이 N개 있다. 각 부품은 정수 형태의 고유한 번호가 있다. 어느 날 손님이 M개의 종류의 부품을 대량으로 구매하겠다며 당일 날 견적서를 요청했다. 동빈이는 때를 놓치지 않고 손님이 문의한 부품 M개 종류를 모두 확인해서 견적서를 작성해야 한다. 이때 가게 안에 부품이 모두 있는지 확인하는 프로그램을 작성해보자. 예를 들어 가게의 부품이 총 5개일 때 부품 번호가 다음과 같다고 하자. N=5 [8, 3, 7, 9, 2] 손님은 총 3개의 부품이 있는지 확인 요청했는데 부품 번호는 다음과 같다. M=3 [5, 7, 9] 이때 손님이 요청한 부품 번호의 순서대로 부품을 확인해 부품이 있으면 yes를, 없으면 no를 출력한다. 구분은 공백으로 한다. 입력 첫째 줄에 정수 N이 ..
알고리즘 정리 <이진 탐색> 이진 탐색 알고리즘이란 리스트 내에서 데이터를 매우 빠르게 탐색하는 알고리즘이다. 먼저 이진 탐색을 배우기 전에 가장 기본 탐색 방법인 순차 탐색에 대해 알아보겠다. 1. 순차 탐색 순차 탐색은 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법이다. 보통 정렬되지 않은 리스트에서 데이터를 찾아야 할 때 사용한다. 리스트 내에 데이터가 아무리 많아도 시간만 충분하다면 항상 원하는 원소를 찾을 수 있다는 장점이 있다. 데이터 예시) 순차 탐색으로 "dongbin"을 찾는 과정 list = ["haneul", "jonggu", "dongbin", "taeil", "sangwook"] 1) 가장 먼저 첫 번째 데이터를 확인한다. -> "haneul"은 찾는 데이터가 ..
이코테 Chapter 05 정렬 - 두 배열의 원소 교체 문제 동빈이는 두 개의 배열 A와 B를 가지고 있다. 두 배열은 N개의 원소로 구성되어 있으며, 배열의 원소는 모두 자연수이다 동빈이는 최대 K 번의 바꿔치기 연산을 수행할 수 있는데, 바꿔치기 연산이란 배열 A에 있는 원소 하나와 배열 B에 있는 원소 하나를 골라서 두 원소를 서로 바꾸는 것을 말한다 동빈이의 최종 목표는 배열 A의 모든 원소의 합이 최대가 되도록 하는 것이며, 여러분은 동빈이를 도와야한다 N, K, 그리고 배열 A와 B의 정보가 주어졌을 때, 최대 K 번의 바꿔치기 연산을 수행하여 만들 수 있는 배열 A의 모든 원소의 합의 최댓값을 출력하는 프로그램을 작성하라 예를 들어 N = 5, K = 3이고, 배열 A와 B가 다음과 같다고 해보자 배열 A = [1, 2, 5, 4, 3] 배열 B..
이코테 Chapter 05 정렬 - 성적이 낮은 순서로 학생 출력하기 문제 N명의 학생의 성적 정보가 주어진다. 형식은 이름 성적 으로 주어지는데 이때 이들의 성적이 낮은 순으로 학생 이름을 출력하는 문제다. 입력 첫 번째 줄에 학생의 수 N이 입력된다. (1
이코테 Chapter 05 정렬 - 위에서 아래로 문제 하나의 수열에는 다양한 수가 존재하며, 이런 큰 수는 크기와 상관 없이 무작위로 주어진다. 이 수를 큰수 부터 작은 수까지 내림차순으로 정렬하면되는 문제다. 즉 수열을 내림차순으로 정렬하는 프로그램을 만들면된다. 입력 첫째 줄에 수열에 속해 있는 수의 개수 N이 주어진다. 이때 범위는 1
알고리즘 정리 <정렬> 정렬이란 데이터를 특정한 기준에 따라서 순서대로 나열하는 것을 말한다. 프로그램을 작성할 때 보통 오름차순, 내림차순 등 어떤 방식으로든 정렬해서 사용하는 경우가 많다. 일반적인 코딩 테스트 문제에서는 요구하는 조건에 따라서 적절한 정렬 알고리즘이 사용되어야 한다. 상황에 적절하지 못한 정렬 알고리즘을 이용하면 프로그램은 비효율적으로 동작하며 필요 이상으로 시간을 많이 소모한다. 정렬 알고리즘에는 대표적으로 [선택 정렬, 삽입 정렬, 퀵 정렬]이 있다. 1. 선택 정렬 쉽게말해 데이터가 무작위로 여러 개 있을 때, 이 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그다음 작은 데이터를 선택해 앞에서 두 번째 데이터와 바꾸는 과정을 반복하는 것. 이 방법은 가장 원시적인 방법으로 매번 ..