Python
파이참에서 GPU사용!
인공지능을 공부할때는 보통 코랩을 통해서 GPU를 사용한다! 하지만 집의 컴퓨터에 GPU가 장착되어 있다면 이를 활용해서 코드를 돌려볼 수도있다. 파이참에서 GPU를 사용하는 방법에 대해 다뤄보겠다 우선 아나콘다를 설치해야 한다. https://www.anaconda.com/products/distribution Anaconda | Anaconda Distribution Anaconda's open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine. www.anaconda.com 그리고 파이썬과 파이참은 설치되어 있다고 가정해보겠다. 아나콘다는 가장 최신..
14003_ 가장 긴 증가하는 수열
https://www.acmicpc.net/problem/14003 14003번: 가장 긴 증가하는 부분 수열 5 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000) www.acmicpc.net 이전에 dp를 이용해서 for문을 두번 돌리는 방식으로 가장 긴 증가하는 수열을 구했었다. 하지만 위 문제는 같은 시간복잡도를 가지고는 풀 수 없다. 시간복잡도를 줄이기 위해서 기록을 위한 dp를 두개를 사용할 것이다. 하나는 해당 숫자가 가진 가장 긴증가하는 부분 수열의 길이를 저장할 것이고 하나는 수열을 증가시킬지 이전 수열과 비교할지를 판독하는데 사용할 임시 배..
14002_가장 긴 증가하는 수열
https://www.acmicpc.net/problem/14002 14002번: 가장 긴 증가하는 부분 수열 4 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 다시 돌아온 dp파트이다. 이전에 가장 긴 증가하는 부분수열의 개수만 구하는 코드를 짠 적이 있는데 이번에는 그 수열자체를 구하는 코드이다. 하지만 첫번째 줄부터 기록해나가면서 작성하는 방법인데는 변함이 없다 1 2 1 3 2 5 라고 생각해보자. 그리고 dp를 [ [1] [2] [1] [3] [2] [5] ] 이렇..
12582_1로 만들기 2
https://www.acmicpc.net/problem/12852 12852번: 1로 만들기 2 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 자연수 N이 주어진다. www.acmicpc.net 이전에 풀어보았었던 내용이지만 값이 엄청 커졌다. dp를 활용해서 푸니까 잘 풀렸다. 1부터 시작해서 *2, *4, +1 을 해서 저장된 값보다 길이가 적으면 그 값들을 리스트형태로 전달하게 해주었다. n = int(input()) dp = [ [] for i in range(n+1) ] dp[1].append(1) for i in range(1,n+1): LEN = len(dp[i]) if i*3
1450_냅색문제
https://www.acmicpc.net/problem/1450 1450번: 냅색문제 첫째 줄에 N과 C가 주어진다. N은 30보다 작거나 같은 자연수, C는 109보다 작거나 같은 음이 아닌 정수이다. 둘째 줄에 물건의 무게가 주어진다. 무게도 109보다 작거나 같은 자연수이다. www.acmicpc.net Meet in Middle알고리즘을 이용해보라고 힌트가 주어져 있는 문제이다. 위 문제같은 경우, 쉽게 생각하면 주어진 배열중에서 합이 c가 넘지않는 부분배열의 개수를 구하는 문제라고 생각해ㅗㄷ 좋을 것이다. 예를들어 [ 1, 2, ,3 , 4, 5,6 ] 해당 6개의 짐이 있다면 합이 10을 넘지않는 부분집합의 개수를 구하는 문제로 봐도 될 것이다. 이런 경우 모든 배열을 한번씩 탐색하면 굉장히..
1644_소수의 연속합
https://www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 이전에 소수구하기 문제를 풀었던 경험이 있는데 소수를 구하는 리스트를 만든 후에, 저번문제에서 다뤘던 방식을 사용해서 문제를 풀면 된다. 두가지의 문제가 합쳐진 형태이다. n = int(input()) lst = [True] * (n+1) for i in range(2,int((n+1)**0.5)+1): if lst[i]: for j in range(i*2,n+1,i): lst[j] = False sosu = [0] for i in range(2,n+1): if lst[i]: sosu.append(i) start,e..