본문 바로가기

Python/Python알고리즘7

[DP] DP 간단한 문제 백준 1, 2, 3 더하기 풀기 [DP] 1, 2, 3 더하기 문제 정수 4를 1,2,3의 합으로 나타내는 방법은 총 7가지가 있습니다. 합을 나타낼 때 수를 1개 이상 사용해야합니다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1,2,3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력 각 테스트 케이스마다, n을 1,2,3의 합으로 나타내는 방법의 수를 출력한다. 예제 입력 3 4 7 10 예제 출력 7 44 274 풀이 방법 먼저 1을 더할때는 구하는 방식이 1 하나밖에 없으므로 dp[0] = 1로 저장합니다. .. 2021. 1. 19.
key와 lambda를 이용한 정렬 리스트를 보면 [[키,값],[이름,점수],[상품,가격],[단어(단어길이]] 이런 식으로 된 값들을 정렬하라는 문제들을 확인 할 수 있습니다. 하지만 파이썬을 이용하면 이러한 문제들은 key와 lambda를 이용해서 아주 쉽게 해결할 수 있습니다. 먼저 처음 예시는 간단하게 과일을 이름순으로 정렬하고 그다음 가격이 낮은 순으로 정렬하겠습니다. 먼저 과일의 값들은 아래와 같습니다. data = [ ["고구마",25000], ["바나나",123232], ["파인애플",4500], ["감자",3000], ["금귤",6000] ] 가격을 기준으로 정렬하겠습니다. data.sort(key = lambda x:x[1]) print(data) ## 출력 값 #[['감자', 3000], ['파인애플', 4500], ['.. 2020. 10. 20.
최장 증가 부분 수열(LIS)-개념 최장 증가 부분 수열 문제는 동적 계획법(DP)로도 풀 수 있는 유명한 알고리즘 문제입니다. 최장 증가 부분 수열 정의 어떤 임의의 수열이 주어질 때, 이 수열에서 몇개의 수들을 제거해서 부분수열을 만들 수 있습니다. 이때 만들어진 부분수열 중 오름차순으로 정렬된 가장 긴 수열을 최장 증가 부분 수열이라고 합니다. 먼저 예시를 들겠습니다. [2,11,4,55,7,9,13,3] 이라는 수열이 있습니다. 이제 이것을 최장 증가 부분 수열로 정리 하겠습니다. 11 제거 [2,4,55,7,9,13,3] 55제거 [2,4,7,9,13,3] 3제거 [2,4,7,9,13] 이렇게 LIS가 나올수 있는데 한 수열 내에서 여러개의 LIS가 나올수 있습니다. 먼저 O(N^2) 알고리즘에 대해서 설명하겠습니다. O(N^2).. 2020. 10. 6.
코테를 위한 isㅇㅇㅇ 메소드 코테를 위한 Python isㅇㅇㅇ메소드 파이썬 isㅇㅇㅇ메소드 파이썬 isㅇㅇㅇ 메소드는 해당 item이 문자열, 숫자, 소문자, 제목등 다양한 값들이 맞는지 True, Flase를 반환해주는 메소드 입니다. 다음 나오는 메소드들은 전부 코딩 테스트를 볼때 알면 좋은 메소드입니다. isalnum( ) isalnum( )은 문자와 숫자의 문자열을 탐지하는 메소드 입니다. 사용 예시는 다음과 같습니다. s = "helhleo123" if s.isalnum(): print("참") else: print("거짓") ### 출력 값 # 참 isalpha( ) isalpha( )는 오직 문자인지 확인하는 메소드 입니다. s = "helhleo123" if s.isalpha(): print("참") else: pr.. 2020. 8. 10.
Python list 연산에 따른 시간 복잡도 python list 연산에 따른 시간 복잡도 시간 복잡도가 O(1)인 연산 len(a) len(a)는 리스트 전체 요소의 개수를 리턴합니다. 사용 예시는 다음과 같습니다. a = [1,2,3,4,5] print(len(a)) ## 출력값 # 5 a[i] a[i]는 리스트중에서 해당 인덱스에 해당하는 값을 가져옵니다. a = [1,2,3,4,5] print(a[3]) ## 출력 값 # 4 a.append(x) a.append(x)는 해당 리스트 맨뒤에 x를 추가해 줍니다. a = [1,2,3] print(a) a.append(4) print(a) ## 출력 값 # [1,2,3] # [1,2,3,4] a.pop() a.pop()는 해당 리스트 맨 뒤에 있는 값을 pop 해줍니다. (스택의 연산 pop) a.. 2020. 8. 9.
분할정복 분할 정복 분할 정복이란 커다란 문제를 작은 부분 부분으로 나누어서 해결하는 방법입니다. 분할 정복의 전략은 재귀적 알고리즘을 사용하여 해결할 수 있습니다. 먼저 분할 정복을 하기 위해서는 두 가지 단계를 거칩니다. 기본 단계를 해결합니다. 이 부분은 가능한 한 간단한 문제여야 합니다. 문제가 기본 단계가 될 때까지 나누거나 작게 만들어야 합니다. 이것을 프로그래밍으로 표현하자면 다음과 같이 표현할 수 있습니다. function F(x): if F(x)가 간단 then: return F(x)를 계산한 값 else: x 를 x1, x2로 분할 F(x1)과 F(x2)를 호출 return F(x1), F(x2)로 F(x)를 구한 값 분할 정복 예시 코드 분할 정복 간단코드 (더하기) 분할 정복을 쉽게 이해하기.. 2020. 8. 6.