본문 바로가기

분류 전체보기

(210)
모두의 딥러닝 - 2장(처음 해 보는 딥러닝) 2장에서는 간단한 딥러닝 예제 코드를 분석해 본다.모든 예제 코드는 모두의 딥러닝 깃허브에서 가져올 수 있다.일단 import로 딥러닝 모델 관련 라이브러리들을 불러오고, 깃허브에서 데이터를 loadtxt 함수로 불러온다.데이터 파일은 각 행마다 16개의 정보들과 환자의 생존 여부로 이루어져 있다.그래서 X는 0:16, y는 16번째 값으로 인덱싱을 했다.다음은 딥러닝 모델 구축 관련인데 model.add로 층을 쌓았다.층의 옵션을 Dense 함수의 인자들로 지정을 해주었다.층으로 쌓아 올린 모델을 compile을 한다.2장은 간단하게 구조만 확인해 봤고 앞으로 더 자세한 원리와 인자들의 뜻을 알아보게 될 것이다.
피보나치 수 6 그냥 n번째 피보나치 수를 구하는 문제인데 값이 커서 최적화를 잘 시켜야 한다.그냥 이 행렬 곱을 이용해서 구하면 된다.행렬의 n제곱을 계산하면 되는데 분할정복 느낌?으로 n/2제곱을 계산하는 식으로 재귀함수를 거치면log(n)의 시간만에 구할 수 있어서 빠르다.#includelong long N;long long K = 1000000007;long long dp[2][2];void fibo(long long n){ if(n==1) return; long long m = n/2; fibo(m); long long mm[2][2]; mm[0][0] = dp[0][0]*dp[0][0]%K + dp[0][1]*dp[1][0]%K; mm[0][1] = dp[0][0]*dp[0][..
문제집 먼저 푸는 것이 없는 문제를 풀 수 있고, 쉬운 문제부터 풀어야 하기 때문에 먼저 푸는 것이 없는 문제들을 우선 순위 큐에 넣고 최소값을 top으로 구해서 출력하면 된다.그리고 문제를 썼으면 pop을 하면서 해당 문제로 인해 먼저 푸는 것이 없어지는 문제들을 큐에 넣어주면 되는 간단한 문제이다.#include#include#include#includeusing namespace std;vector prob[40004];vector rev[40004];priority_queuelast;int N,M;int main(){ scanf("%d %d",&N,&M); for(int i=1;i해결 코드이다.
보석 도둑 간단한 문제이다.그리디 알고리즘을 쓰면 된다.최대 무게가 작은 가방부터 보면서 담을 수 있는 보석 중에 가격이 젤 높은 보석을 담으면 된다.가방 개수가 K개인데 가방마다 보석 N개를 전부 조사하면 O(NK)로 시간이 너무 오래 걸리니까보석도 무게가 작은거부터 스택에 넣어두고 스택을 유지하면서 top을 담으면 된다.#include#include#includeusing namespace std;int N,K;long long bag[400005];struct Data{ long long m,v; bool operator values;int main(){ scanf("%d %d",&N,&K); for(int i=1;i코드이다. 계속 런타임 에러가 생겨서 맞왜틀 고쳤는데 에러 발생 이유는 ..
후위 표기식 후위 표기식은 꽤 유명한 문제인데 스택을 사용해야 한다.기호는 +,-,*,/,(,)만 등장한다.문제를 풀기 위한 스텝을 보면일단 문자 A,B같은게 나오면 그냥 출력한다.기호가 나오면 스택에 넣는데 넣기 전에 자기보다 우선순위가 높은 것들을 출력해야 한다.+,-는 자기보다 먼저 등장한 +나 -, 그리고 *,/가 전부 다 우선순위가 높기 때문에 (가 나오기 전까지 다 출력해야 한다.if(eq[i]=='+' || eq[i]=='-'){ while(!st.empty()){ if(st.top()=='(') break; printf("%c",st.top()); st.pop(); } st.push(eq[i]);}*,/는 자기보다 먼저 등장한 *,/만 출력하면 된다..
음성인식 네이버 클라우드 플랫폼으로 이동해서 AI, Naver API에 Application을 등록한다.CSR을 이용할 거고 서비스 환경 등록에서 웹이나 앱 등록하라고 할 텐데 굳이 등록 안해도 된다.아무튼 등록하고 나면 인증 정보를 눌러서 Client ID와 Client Secret 키를 볼 수 있다.import jsonimport requestsdata = open("./test.m4a", "rb") # STT를 진행하고자 하는 음성 파일Lang = "Kor" # Kor / Jpn / Chn / EngURL = "https://naveropenapi.apigw.ntruss.com/recog/v1/stt?lang=" + LangID = "" # 인증 정보의 Client IDSecret = "" # 인증 정보의 ..
가운데를 말해요 이것도 전 문제처럼 이분탐색을 사용해서 입력값이 주어질 때마다 어느 위치에 들어가야 하는지 계산하고, 배열을 만들어서 중간 인덱스의 값을 가져오면 될거라고 생각했는데, 어느 위치에 들어가야 되는지 계산을 하고 나서 중간 어딘가에 그 값을 넣으려면 배열에 있는 값들을 하나씩 뒤로 밀어야 하는데, 이 과정이 최대 N만큼 시간이 걸리니까 결국 총 시간이 제곱이 되어서 불가능하다는 것을 알게 되었다. 결국 풀이를 찾아봤는데 max힙과 min힙을 이용해서 중간값을 찾아야 한다.간단하게 설명하자면, 수열의 정렬된 상태에서 왼쪽 절반이 max힙, 오른쪽 절반이 min힙에 들어있어야 한다.그리고 max힙에서 top이 중간값이다. 수열에서 숫자를 하나씩 읽어올 때마다 해야 하는 일을 정리해보자면, 값이 중간값보다 크면 ..
가장 긴 증가하는 부분 수열 2 dp로 풀려고 했는데 시간복잡도가 제곱이라 안될거 같아서 이분 탐색을 써야겠다는 생각이 들었다.수열을 앞에서부터 읽으면서 가장 긴 증가하는 부분 수열 lis라는 배열을 따로 만들어서 값을 채워간다.수열의 값이 lis의 마지막 값, 즉 가장 큰 값보다 더 크면 lis의 크기를 늘리고 맨 뒤에 추가시켜준다.lis의 마지막 값보다 크지 않을 때는 수열의 값이 lis 배열 내에서 어디 위치해야 하는지 이분탐색으로 찾아주고, 대체해준다.예를 들어서 10 20 40 이 있는 경우에 15가 들어오면 15는 10과 20 사이인데 20을 대체해서 10 15 40으로 만들어준다.#includeint N,ans;int lis[1000004];int pos(int s, int e, int v){ if(s==e) retu..