너에게 하고 싶었던 말이야
멀리 있어도, 힘내라 친구야
키자드에 등록된 총 336개의 포스트를 확인하실 수 있습니다.
방학동안 친구들이랑 제대로 놀아보라는 그 충고 내가 못 이룰 거 같네 난 항상 모든 일에 최선을 다했다고 말할 수 있었다. 큰 꿈을 찾기 전엔 지금은 다시 모르는, 새로운, 큰 목표를 향해 가고 있다. 목표가 내가 원했던 목표가 아니었고, 내가 바랬던 목표가 아니었기에 그 목표를 이룬 성취감과 만족감은 항상 낮았다. 행복했던건 아주 짧은 순간이었다. 그래서 난 지금도 이게 내가 행복할 길인지 내가 진정 원하는 길인지 생각이 참 많다. 하고 싶은 걸 못 한다는 건 이렇게 마음이 쓸쓸해진다 그리고 지금 내가 뭘해야 이 상황이 나아질 수 있는지 모르겠다.
세상은 생각보다 일상적이다. 내가 새로운 길을 향해 걸어봤을 때, 세상은 생각보다 똑같이 흘러 갔다. 매일 내 하루의 일부분을 차지 했던 일상이 오늘은 일상이 되지 않았을 때, 몹시도 그 일상은 어떻게 흘러갔을 지 궁금해진다. 앞으로 그 일상은 다시 다가올 것이라 믿으며, 나는 atmel studio 6.2를 설치한다.
어제 무슨 일이 있는 걸까 귀찮아 진 것 일까 무슨 일이 있는 거라면 나한테 하소연해도 되는데 잠온다 눈꺼풀이 무거워서 잠이 오기는 참 오랜만이다.
관계 속이 아니라 나는 인간대 인간으로 내민 손길이였다. 진심을 다해 보낸 용기를 알아주지 못하는 사람은 나에게 큰 상처가 될 뿐이고 그것은 그렇게 열었던 문을 다시 닫게 하는 존재이다. 진심이 다하였을 때 세상에서 하늘을 바라보는 우리는 더 작은 존재이며 힘들어진다. 그래서 끝까지 최선을 다한다는 말은 참 어렵고 힘든 말이다. 우리는 이것을 상대방에게 힘을 주는 용기로 그러나 그 상대는 세상이 어렵게 다시 인식되어지는 말이다. 상대가 무엇을 말하려는지 생각하자 귀 기울여 주지않고 진심을 다한다는 것은 눈부신 햇볕속에 작은 별빛을 찾는 것과 같다.
https://www.google.com/search/howsearchworks/ Google 검색의 원리 | 개요 Google에서 사용자에게 유용하고 관련성이 높은 검색결과를 신속하게 제공하기 위하여 인터넷에 있는 방대한 정보를 어떻게 훑어보고 구성하는지 자세히 알아보세요. www.google.com
<개선할 부분> 1. hash table을 load하는 데 오래 걸림 텍스트 파일에서 hash table을 읽어와서 map으로 저장한 후 map에서 binary로 write 함 (fwrite) 다음에는 binary다시 쓴 파일을 읽어드림 -> 로드 시간이 텍스트파일에서 읽는 것보다 binary로 할 시에 더욱 빨라짐 https://github.com/nh9k/Searching_Engine nh9k/Searching_Engine STL(C++) implementation of our Search Engine. Contribute to nh9k/Searching_Engine development by creating an account on GitHub. github.com
str1.compare(str2) //strcmp와 같으나, strcmp는 문자[]이 입력 str1[i] = toupper(str1[i]); //소문자를 대문자로 교환. <-> tolower 1. 두 스트링을 받아서 2글자씩 끊어서 char calstr1[1000][2], calstr2[1000][2]에 저장을 하였고, 2. 이중 for문(and_oper)함수에서 교집합을 계산후 3. 합집합(or_oper)은 은 (전체 2글자씩 끊은 글자의 수) - (and_oper)로 하였다. 4. 교집합과 합집합이 둘다 0으로 나오는 경우가 있는데, 이 경우는 두 스트링문자가 똑같거나 or 아에 다른 경우인데 숫자나 기호가 섞인경우이므로, str1.compare(str2) == srtcmp(const *char, const*chart)을 사용하여 후 처리 해주었다. #include <string> #include <iostream> using namespace std; char calstr1[1
이 문제도 추석 트래픽 문제처럼 msec 단위로 풀면 더 간단해질 것 같다. #include <cstring> //까먹지 말기 priority_queue <int, vector<int>, greater<int>> pq; //외우기: top:min to_string(temp) // int에서 string으로 { //분리하는 법 외우기 //연습 많이 하기 char cpy[6]; strcpy(cpy, timetable[i].c_str()); char *split = strtok(cpy, ":"); //시 int present = stoi(split) * 100; split = strtok(NULL, " ");//분 } 전체 2시간 25분동안 풀이한 문제. 1. 스트링을 int로 바꾸어주었다 ex, 09:09 -> 909 2. priority queue에 삽입하여 시간이 작은 것부터 top해 볼 수 있게 하였다. 3. n*m만큼 돌면서 pq를 비워주었다. 셔틀 출발시간을 n회 t구간으로 나
페이지 교체 알고리즘은 페이징 기법으로 메모리를 관리하는 운영체제에서, 페이지 부재가 발생 하여 새로운 페이지를 할당하기 위해 현재 할당된 페이지 중 어느 것과 교체할지를 결정하는 방법입니다. 페이지 교체 알고리즘의 예로, FIFO, LFU, LRU 알고리즘 등이 있습니다. FIFO : 페이지가 주기억장치에 적재된 시간을 기준으로 교체될 페이지를 선정하는 기법(First In First Out) 단점 : 중요한 페이지가 오래 있었다는 이유만으로 교체되는 불합리. 가장 오래 있었던 페이지는 앞으로 계속 사용될 가능성이 있음. LFU : 가장 적은 횟수를 참조하는 페이지를 교체(Least Frequently Used) 단점 : 참조될 가능성이 많음에도 불구하고 횟수에 의한 방법이므로 최근에 사용된 프로그램을 교체시킬 가능성이 있고, 해당 횟수를 증가시키므로 오버헤드 발생 LRU : 가장 오랫동안 참조되지 않은 페이지를 교체(Least Recently Used) 단점 : 프로세스가 주기억
LRU알고리즘을 알았더라면 더 빨리 풀 수 있는 문제. 처음에 LRU 알고리즘 공부했지만 잘못된 알고리즘을 가르쳐준 블로그때문에 정확한 정답을 구할 수 없었음. 그 블로그가 소개한 알고리즘이 잘못된 것인지, 아니면 같은 알고리즘에 다른 성능을 가지는 알고리즘인지 더 알아봐야할 것 같음. LRU알고리즘 공부시간 + 풀이시간 전체 = 3시간 정도 풀이함 정확한 LRU 알고리즘은 다음과 같음. 카카오 문제에서 vector <string> pv로만으로도 구현가능했음. 1. 삭제는 first만 2. 삽입은 push_back만 -삽입시 hit인 경우는 그 자리의 데이터를 삭제하고 다시 삽입 -삽입시 miss인 경우는 그대로 push_back 예시는 다음 사이트 참고. https://gomguard.tistory.com/115 페이지 교체 알고리즘 - LRU 페이지 교체 알고리즘 사회의 자원은 한정되어 있고 그 한정된 자원을 효율적으로 사용하기 위해 각종 법과 규칙이 존재합니다. 눈에 확연히 보
※요약 strcmp : 대소문자를 구분하여 두 개의 문자열을 비교합니다. strncmp : 대소문자를 구분하여 지정된 길이만큼 두 개의 문자열을 비교합니다. stricmp : 대소문자를 구분하지 않고 두 개의 문자열을 비교합니다. strnicmp : 대소문자를 구분하지 않고 지정된 길이만큼 두 개의 문자열을 비교합니다. https://ra2kstar.tistory.com/85 C 프로그래밍 : 문자열 비교함수 (strcmp(), strcasecmp() ..) C Programming C 프로그래밍 문자열 비교 함수 (strcmp()) 두 문자열을 비교하기 위해서 어떻게 하면 될까. JAVA의 경우 equals() 를 이용하면 true, false 값을 얻어 올 수 있지만.. c 에서도 그런 것이 있을까?.. ra2kstar.tistory.com https://shaeod.tistory.com/219 [C언어] 문자열 비교 관련 함수 - strcmp, strncmp, stricmp,
다음의 점을 처리해주지 않아 문제풀이가 더욱 오래걸렸다.. 1. msec 환산 시간을 계산할 때 일일이 시분초 계산을 할 경우 복잡하고 복잡도도 더 올라간다. -> 모든 msec 단위로 변환하여 할 경우 60시분초 이상 이하 올림 내림을 따로 계산할 필요가 없어진다. 2. 시간 초과 -> 시간 초과가 나면 트래픽의 시작점과 끝점의 리스트를 만들어 그 중에서만 돌려라. 어차피, 시작점과 끝점에서만 트래픽의 상태가 변하므로 이 리스트만으로도 정확한 계산 결과가 나온다. 3. stoi(lines[i].substr(시작배열인자, 시작으로 부터 개수)) 시작 배열 인자가 스트링 처음은 0부터 시작한다는 점을 잊지말자. 만약 2자리수를 얻고 싶다면 개수에 2를 넣기 일일이 strtok 해주니까 소스가 더 복잡하다. 4. secs를 float으로 말고 msecs를 따로 받자 -> float으로 받으니 제대로 값이 받아지지 않았다. ex) 4.002 -> 4.001999... 5. unsigned
1. stack으로 넣음 2. 다시 꺼내면서 #인지 공백인지에 따라 string input에 넣고 input을 다음 원소로 넘어가기전에 answer 배열에 push_back해줌 -오래걸린 부분 while문에 원소가 0인 경우 예외처리를 안해줌 -푸는 데 걸린 시간: 1시간 18분 #include <string> #include <vector> #include <stack> using namespace std; vector<string> solution(int n, vector<int> arr1, vector<int> arr2) { stack <bool> binary_x, binary_y; vector<string> answer; for (int i = 0; i < n; i++) { int x = arr1[i]; int y = arr2[i]; //* 배열 1에 대해 이진화 while (x != 1 && x!=0) { binary_x.push(x % 2); x /= 2; } if(x!=
37분동안 풀이함. 주의할 점 1. dartResult[i] <= "10" 은 멀티 바이트라 측정할 수 없다 만약 10이라면, 두자리 수 이므로 string index를 두번 더 넘겨주고 10이라하고 계산하면 된다. 2. if (ridx == 0) //첫번째 점수 첫번째 점수는 i==0이 아니라 ridx가 0인 것이 맞다. #include <string> #include <cstring> using namespace std; int solution(string dartResult) { int result[3], ridx = -1; int length = dartResult.length(); bool flag = false; for (int i = 0; i < length; i++) { if (flag == true) { flag = false; continue; } if (dartResult[i] >= '0' && dartResult[i] <= '9') //점수 { ridx++; i
처음에는 24번 케이스부터 시간 초과가 났다. 그래서 이름을 모두 벡터에 추가한 후 뒤에서 부터 찾아 최신화된 것을 찾는 방법 -> 벡터에서 뒤에것을 살리고 중복인 id를 지우는 방법 -> map을 이용해 처음부터 중복을 제거하는 방법 을 사용하였더니 겨우 통과함. #include <string> #include <vector> #include <cstring> #include <algorithm> #include <map> #include <iostream> using namespace std; typedef struct { string id; string nick; }INFO; vector<string> solution(vector<string> record) { map <string, string> user; //vector <INFO> user; vector<string> answer; int idx = record.size(); //*id와 닉네임 입력하기 & enter 이
+추가 0으로 나누는 경우는 프로그램이 죽을 수도 있다고한다. 만약 데이터를 몇개 뽑아내다가 멈추는 경우는 실패라고 뜰것이다. 이 경우는 0으로 나누는 경우를 생각해야 하고 이 소스 다음의 경우는 0으로 나누는 경우를 생각하지 않아도 된다. 왜그럴까? 그리고 아래의 cmp 함수로 first와 second를 원하는 방법으로 정렬할 수 있다. 실패율이 같은 경우(first가 같은 경우) index를 가지고 정렬을 하면(second) 된다. bool cmp(const pair<float, int>& a,const pair<float, int>& b) { if (a.first == b.first) return a.second < b.second; return a.first > b.first; } #include <string> #include <vector> #include <algorithm> #include <iostream> using namespace std; bool cmp(con
dfs로 풀었고, 12, 13이 포함되는데 234도 포함하는 경우는 생각지못해서 다시작성. 이 경우로부터 원래의 값들을 yes에 저장하게됨. 나중에 풀때는 예외사항이 있는지 더 잘 생각하고 소스짜자. #include <string> #include <vector> //#include <iostream> using namespace std; vector<vector<string>> cpy_rela; int keyvalue; int visit[8]; vector <vector<bool>> yes; int x, y, yesidx; bool checking() { bool pass = false; for (int i = 0; i < x; i++) { for (int i2 = i + 1; i2 < x; i2++) { for (int j = 0; j < y; j++) { //if (visit[j] == 2) continue; if (visit[j]) { if (cpy_rela[i][j].com
//https://swjeong.tistory.com/77 //http://blog.naver.com/PostView.nhn?blogId=withham1&logNo=221365222338&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView #include <string> #include <vector> #include <algorithm> #include <iostream> using namespace std; bool cmp(pair<int, int> &a, pair<int, int> &b) { return a.second < b.second; } int solution(vector<int> food_times, long long k) { vector <pair<int, int>> food; for (int i = 0; i < food_times.size(); i++) food.push_bac
9번 케이스가 통과 안되서 myurl[0] = pages[i].find("<meta property="); 로 하니까 통과함 -find함수를 어떻게 쓰는지, find(찾고싶은 스트링이나 문자, 어디서부터 찾고싶은지 string내부에서 index) -substr함수를 어떻게 쓰는지 익힘 스트링.substr(여기서 시작, 글자수) 주의할 점 최종적으로 링크 점수를 계산할 때 -검사하는 url에서 외부 url로 들어가 점수를 더해줌 -map으로 설정후 나중에 index와 최종 점수 만으로 vector를 만들어서 sort해냄 -idx++하는 거 잊지말기 #include <string> #include <vector> //#include <cstring> #include <algorithm> #include <map> #include <iostream> using namespace std; typedef struct { vector <string> links;//외부 url int my_id
스터디날 53분 동안 풀었던 문제. 문제는 이전에 sw문제 벽돌부수기?와 똑같다. 풀어본 사람들은 알 것이니 알고리즘 설명은 pass. 다른 점은 벽돌 부수기는 4방향으로 쭉 뻗어나가는 모양이었는데, 이번 문제는 한번 탐색할 때 우방향, 하방향, 대각선우하방향만 보면된다. 나머지 알고리즘은 같다. #include <string> #include <vector> #include <queue> #include <stack> //#include <iostream> using namespace std; int solution(int m, int n, vector<string> board) { queue <pair<int, int>> erase_list; stack <char> arrange_block; int erase_num = 0; //나중에 제거할 때 ++하기 bool endflag = false; while (!endflag) { for (int i = 0; i < m - 1; i+
할 때 answer.resize(2); 를 해줘야 한다는 것 까먹지 말기 preorder를 postorder에 복사해서 넣어서 실수함. 기본적인 트리구조 만들기 등 실습해볼 수 있는 기회였음. //https://kswims.tistory.com/187 #include <string> #include <vector> #include <algorithm> #include <iostream> using namespace std; typedef struct { int x, y, index; }infos; typedef struct node{ struct node *left; struct node *right; int value, x; }nodes; nodes *root; bool cmp( infos& a, infos& b) { if (a.y == b.y) return a.x < b.x; return a.y > b.y; } void linking(nodes *curr, nodes *newNo
우선 초반에 했던 실수는 1. marble mem_red, mem_blue; mem_red.x = red.x, mem_red.y = red.y, mem_blue.x = blue.x, mem_blue.y = blue.y; 구슬이 이동하지 못했을 때 기억하는 mem 변수를 전역으로 선언해서 제대로된 mem변수로서 역할을 사용하지 못함 2. 다음 경우와 같이 blue가 피해서 red가 들어가는 경우는 원래 red가 제자리 이면 blue를 갱신해주었는데(즉, red만 dfs의 주체가 될뿐, blue는 주체가 아니라 생각함) 그러나 blue가 이동해서 red가 덕본 경우가 있는데 이렇게 소스 코드 변경해줌 if ((red.x == mem_red.x&&red.y == mem_red.y) && (blue.x == mem_blue.x&&blue.y == mem_blue.y)) { continue; } 10 6 ###### #....# #.#..# #..#R# ##.#.# #....# #.#.B#
이런 경우에는 이렇게 예외 처리를 해줘야 겠다고 생각이들때, 정말 그 생각이 맞는지 다른 예외도 함께 생각해보기! 예를 들어 구슬 탈출 2 문제를 볼 때, 빨간 구슬이 왼쪽, 파란 구슬이 오른쪽일 때 오른쪽 방향으로 향할 때 파란 구슬 먼저, 빨간 구슬을 처리해주고 왼쪽 방향 처리도 잊지 않고 해준 점은 잘한 점이다. 그러나, 이동이 없을 때 빨간 구슬을 기준으로 보고, 파란 구슬의 이동이 있을 때는 무시해주었다. 이는, 파란 구슬이 이동으로 빨간 구슬이 갈 수 있는 길을 열어 준 것을 몰랐던 것이다.
내가 푼 구슬 탈출2 문제는 DFS이다. 한 정점을 기준으로 모든 주변을 둘러보는 것은 맞지만, 우선시 되는 것은 갈수 있는 방향일 때를 재귀로 들어가 다음 갈 수 있는 방향을 탐색하는 일이기 때문. + BFS(Breadth First Serch) - '너비 우선 탐색'; - 현재 정점에서 갈 수 있는 점들부터 탐색; - 큐를 이용해서 구현; + DFS(Depth First Serch) - '깊이 우선 탐색'; - 현재 정점에서 갈 수 있는 점들 중, 한 곳을 우선적으로 끝까지 탐색; - 스택이나 재귀함수로 구현;
57분컷.. 방향을 지정해주고 직행하거나 다시 방향을 트는데 복잡하게 for문으로 풀지 않고 재귀로 풀어 다음 재귀로 들어갔을 시에 방향턴한 것을 검사하도록 하였다. 방향을 지정해주는 데 다음 두가지를 잘 못해서 정확한 답이 안나왔다. int dir[4] = { 3,0,1,2 }, dirx[4] = { -1,0,1,0 } 왼쪽으로 방향을 틀어야하므로 0방향->3방향, 1방향->0방향, 2방향->1방향, 3방향->2방향 으로 향해야하며, dirx는 1,0,-1,0으로 써서 실수했다. #include <iostream> using namespace std; int n, m, map[50][50]; int dir[4] = { 3,0,1,2 }, dirx[4] = { -1,0,1,0 }, diry[4] = { 0,1,0,-1 }, cross_dir[4] = { 2,3,0,1 }; bool finish; typedef struct { int x, y, dir, cnt; }position; p
이 문제는 이전에 풀어본적이 있어 쉽게 풀었다.(모의 sw(18) 숫자 만들기-DFS) 23분컷.. 주의할점 1. dfs내부에 plus, minus,..를 확인하는 if문은 모두 if문으로 구성해야 돌아간다. 2. max값이 음수일 수도 있으니 -값을 초기값으로 가지게 한다. #include <iostream> using namespace std; int num, number[11], oper[4];//input int min_value, max_value; void dfs(int calculate, int idx, int plus, int minus, int multiple, int devide) { if (idx == num) { if (min_value > calculate) min_value = calculate; if (max_value < calculate) max_value = calculate; return; } if (plus) dfs(calculate + numbe
약 1시간 3분 컷, 만약 공부하기 싫은 시간 포함하면 1시간 33분컷. 실수할 수 있는점 1. 보드 사이즈가 무조건 0이 아니라는 점 보드 사이즈 최대 20을 맞춰줘야함 (map, cpymap) 2. 스택에 넣은 후 다시 뺄 때 empty검사를 하고 같으면, 아니면으로도 생각해줘야한다. 다음 소스에서 else문을 잊고 코딩 안함. if (!block.empty()) { if (block.top() == temp) { map[x][y] = temp * 2; block.pop(); } else { map[x][y] = temp; } } #include <iostream> #include <stack> using namespace std; int map[20][20], n, max_value; stack <int> block; void stack_block(int dir) { if (dir == 0)//상 { for (int y = 0; y < n; y++) { for (int x =
이전에 풀어봐서 더 빨리 풀 수 있었다. 다음 두가지때문에 정확한 답이 나오지 않았다. 1. core dumped가 나와서 board를 cpyboard 배열을 만들어 돌리니 core dumped가 해소되었다. 이는 함수 내부 stack영역이 꽉차서 오류난 것 같다. 2. block 이 200이하이므로 다음과 같이 201로 선언하여야, 블록의 숫자가 200인것도 해결할 수 있다. block b[201]; #include <string> #include <vector> #include <iostream> using namespace std; typedef struct { int x[4], y[4], idx, shape; //원하는 모양이 없으면 0넣기 }block; block b[201]; int cpyboard[50][50]; int n; void check_shape() { for (int ni = 1; ni <= n; ni++) { if ((b[ni].x[0] + 1 == b[ni
1시간 27분 컷. 저번에 고민하다가 해서 시간 단축함.. 뱀이 머리 이동하고 사과 있으면 꼬리 이동하므로, 뱀이 머리 이동하고 몸통이 있는 경우를 확인해야함. #include <iostream> #include <vector> #include <queue> using namespace std; int n, k, l; //뱀 typedef struct { int x, y; int dir = 1; //처음은 우방향 }body; vector <body> snake; //사과 typedef struct { int x, y; }pos; vector <pos> apple; //방향(움직임) typedef struct { int t; char dir; }dir_; queue <dir_> mov; int dirx[4] = { -1,0,1,0 }, diry[4] = { 0,1,0,-1 }; //상우하좌 int left_[4] = { 3,0,1,2 }, right_[4] = { 1,2,3,0 };
cnt값이 0 6개가 붙을 수 있는데 int형으로 해서 틀림 오랫동안 고민했는데 몰라서 답을 보게됨.. double이 안되는 이유는 실수형이라서 안됨. cout을 할 경우 한자리만 출력되기 때문에 정확한 longlong형으로 하는 것이 좋음. 만약 %d로 할경우(printf)도 오버플로우나므로, 그냥 long long 쓰라고 준 문제임. #include <iostream> #define million 1000000 int n, room[million], first_d, second_d; long long cnt = 0; using namespace std; void calculation() { for (int ni = 0; ni < n; ni++) { room[ni] -= first_d; if (room[ni] <= 0) continue; if (room[ni] <= second_d) { cnt++; } else { int share = room[ni] / second_d; int
약 1시간 30분 컷 반복하는 규칙을 찾아서 풀면 된다. 규칙을 찾느라 오래걸림. 처음 간 방향을 벡터에 넣고 벡터의 다시 끝부터 방향을 읽으면서 (반대 방향->90도회전)하면서 이동함 #include <iostream> #include <vector> using namespace std; int n, map[101][101]; int dx[4] = { 1,0,-1,0 }, dy[4] = { 0,-1,0,1 }, clockwise[4] = { 3,0,1,2 }, oppos[4] = { 2,3,0,1 }; void dragon_curve(int x, int y, int d, int g) //드래곤 커브를 map에 표시하는 함수 { //cout << d << endl; vector <int> curve; curve.push_back(d); map[x][y] = 1; x += dx[d], y += dy[d]; map[x][y] = 1; int cnt = 0; while (cnt != g)
약 2시간 만에 푼 문제. 처음에 푼 풀이는 틀려서 고민하다가 모르겠어서 질문글을 보게됨. 다음과 같은 경우에서 정답이 6이 나와야하는데 8이나옴 4 2 0 2 0 1 0 1 2 2 0 0 0 0 1 0 2 1 -> 이유는 무조건 최소거리 합으로 정렬한다고 해도 모든 치킨 집에 대해 살아남을 치킨집만 거리를 구하면, 최소인 거리가 더욱 커질 수 있음. 즉, 전체적으로 최소지만, 특정 몇몇개는 거리가 멀수도 있다. -> 이경우로 인해 치킨집 개수중 m개 만큼 조합으로 뽑아서 최소거리를 계산하여 그 중 다시 최솟값을 정답으로 해서 해결함. -> 무슨 짓을 다하고도 정답이 아닐 때 내가 생각한 것이 정확한 답인지 고민해도 모를 때, 전체 경우에 대해서 다해보는 탐색을 구현할 것!! #include <iostream> //#include <cmath> #include <algorithm> using namespace std; int n, m; typedef struct { int x, y,
아무리 생각해도 주사위를 어떻게 굴려야할지 몰라서 다른 사람이 쓴 소스코드를 보고 생각해보았다. 북, 남, 서, 동에 따라 한 번 움직였을 때, 그때의 주사위 변화에 따라서 본래 주사위의 위치에서 이동한 주사위 위치일 때의 주사위의 top, bottom, north, south, east, west에 대입해주면 된다. 경험에 도움이 된 문제였다. #include <iostream> using namespace std; typedef struct { int top=0, bottom=0, west=0, east=0, north=0, south=0; }DICE; DICE d; int map[20][20]; int n, m, x, y, k; //동:1, 서:2, 북:3, 남:4 int dy[5] = { 0,1,-1,0,0 }, dx[5] = { 0,0,0,-1,1 }; void dice(int dir) { int temp = d.top; if (dir == 2) //동 { d.top = d
기억이 안나서 다시 풀었는데 그때보다 더욱 이해가 되었다 처음 temp[0]는 항상 0으로 두고, 3달치와 3달의 min(1달*3이나 1일*plan[pi]*3이나)과 비교하여 풀 수 있었다. #include <iostream> #include <algorithm> using namespace std; int cost[4], plan[12]; int temp[13]; int dp() { for (int pi = 1; pi < 13; ++pi) { temp[pi] = min(plan[pi-1] * cost[0], cost[1]); } for (int pi = 0; pi < 13; ++pi) { if (pi > 0) temp[pi] += temp[pi - 1]; if (pi > 2) temp[pi] = min(temp[pi], temp[pi-3]+cost[2]); } if (cost[3] < temp[12]) return cost[3]; else return temp[12]; } int
전에 몰라서 못 풀었던 문제인데, 다른 사람이 푼 풀이를 보고 방법을 터득, 핵심은 완전 탐색으로(순열로) 겹치지 않는 3자리 숫자를 만들고 얻은 baseball 결과로 strike, ball 판단이 맞는지 확인하기 tmp_s = 0, tmp_b = 0; //다시 초기화 해주기! 조심 temp[2] == N[nsz].number[1] //조심!! 3자리 숫자가 반복해서 구해지길래 무언가를 했더니 더이상 겹치지 않았음. if (cnt >= 3) //조심!! -> 이거 안해주니까 겹치는 숫자 반복함 원래 cnt > 3이었음 #include <string> #include <vector> #include <iostream> using namespace std; typedef struct { int number[3], s, b; }NUM; NUM N[100]; int N_SIZE, temp[3], answer; bool onoff[10]; void permu_(int cnt)//세 자리 순
13분 컷,,,쉽게 통과함. 스택을 이용했음 #include <iostream> #include <string> #include <stack> using namespace std; void solution(string input) { int ssz = input.length(); stack <char> balance; for (int sz = 0; sz < ssz; ++sz) { if (balance.empty()) { if (input[sz] == ')') { cout << "NO" << '\n'; return; } balance.push('('); continue; } if (input[sz]==')') { balance.pop(); } else { balance.push('('); } } if (!balance.empty()) { cout << "NO" << '\n'; return; } else cout << "YES" << '\n'; } int main() { int tc;
L이 문자수를 모두 합할 경우 1,000,000이므로, 만약 각 문자당 한글자씩 비교하면서 할 경우 1,000,000^2만큼의 복잡도가 든다. 그러므로 시간초과. 처음에는 한글자씩 비교했지만, 해설을 보고 SORT를 하면 앞 뒤 문자만 비교하면 된다는 것을 알게되고, 다시 코딩했다.. #include <string> #include <algorithm> #include <vector> #include <iostream> using namespace std; int solution(vector<string> words) { sort(words.begin(), words.end()); int temp = 1, answer = 0; for (int i = 0; i < words.size(); ++i) { if (i == 0) { for (int k = 0; k < min(words[i].length(), words[i + 1].length()); ++k) { if (words[i][k]
링크된 페이지의 그림만 봐도 쉽게 이해할 수 있는 자료구조. https://jason9319.tistory.com/129 [자료구조]트라이(Trie) 트라이(Trie)는 문자열에서의 검색을 빠르게 해주는 자료구조입니다. 우리는 정수형 자료형에 대해서 이진검색트리를 이용하면 O(logN)의 시간만에 원하는 데이터를 검색할 수 있습니다. 하지만 문자열에서 이진검.. jason9319.tistory.com
idx를 넘길 때 사용한 일인 consume을 더해서 넘기서 그 idx부터 검사하도록 하였다. 굿 아이디어. 마지막에 더한 것이 퇴사일이 아닌 퇴사일 초과라면, 마지막에 더한 것을 제외해준다. 40분 컷.. #include <iostream> using namespace std; int n, max_sum; typedef struct { int consume, cost; }CONSULTING; CONSULTING day[15]; //오히려 함수 인자들을 줄여라! void dfs(int idx, int temp_sum, int present) { if (idx >= n) { if (idx != n) { temp_sum -= present; } if (max_sum < temp_sum) max_sum = temp_sum; return; } for (int i = idx; i < n; ++i) { dfs(i + day[i].consume, temp_sum + day[i].cost, day
자신이 쓰려는 알고리즘이 너무 복잡하고 어떻게 풀어야 할지 모르겠다면. 알고리즘을 다시 생각해보고, 더 간단하게 생각해야한다. 새로운 띵킹이 필요하다. 규칙이 있는 것 같다면 무조건 규칙을 찾으려 애써야한다. 만약 시간내에 규칙을 못 찾을 것 같다면 다른 문제를 먼저 풀어보자.
Develop Custom Speech Synthesis Service using Deep learning April 2019 – Sep 2019 · Using Multi-speaker-tacotron model, which combines Google Tacotron and Baidu Deep Voice · Learning with Data that includes Seok-Hee Son (News anchor), in-na Yoo (actress), Korean corpus, Ju-Hyung Lee (Team), and Nan-Hee Kim · Created web services through good model learning results, and its contents are basic synthesizer, letter writing, briefing, alarm service · Project idea presentation and progress, develop Li
https://www.slideshare.net/ssuserf5270f/we-can-decideproposalnanheekim https://www.slideshare.net/ssuserf5270f/we-can-decidefinalnanheekim 사용한 소스 코드는 다음을 참고해주세요 https://github.com/nh9k/We-can-decide-MFC-program nh9k/We-can-decide-MFC-program YU project implementation. Contribute to nh9k/We-can-decide-MFC-program development by creating an account on GitHub. github.com
첨부파일 ORCAD 7segment.zip 파일 다운로드 https://www.slideshare.net/ssuserf5270f/digital-clock-using-7segmentnanheekim
https://www.slideshare.net/ssuserf5270f/control-led-using-relay-module-and-transistornanheekim
Transfer Learning of Alexnet for fire Image Classification Dec 2018 · Fine-tune a pretrained Alexnet to perform classification on a new collection of images(fire image) · Replace final layers which is last three layers of the pretrained network for 1000 classes · After classification, through post processing, I detected the fire through image binary, drew a bounding box, and cropped using computer vision knowledge Demo video PPT https://www.slideshare.net/ssuserf5270f/transfer-learning-of-model-
https://www.slideshare.net/ssuserf5270f/searching-algorithmnanheekim 사용한 소스 코드는 다음을 참고해주세요! https://github.com/nh9k/Searching-Engine nh9k/Searching-Engine STL(C++) implementation of our Search Engine. Contribute to nh9k/Searching-Engine development by creating an account on GitHub. github.com
https://www.slideshare.net/ssuserf5270f/creating-text-to-talk-active-imagenanheekim 데모 영상은 개인 얼굴이 많이 나와서 따로 첨부하진 않습니다.
사용한 소스 코드는 다음의 깃허브 링크를 참고해주세요. https://github.com/nh9k/Computer-vision#9-stereo-matching-and-rendering nh9k/Computer-vision Computer Vision implementation. Contribute to nh9k/Computer-vision development by creating an account on GitHub. github.com
1. 2족로봇 다리만 처음 공부할 당시(frame 제작했던 파일은 따로 보관) https://www.slideshare.net/ssuserf5270f/seminar-2legs-robotsnanheekim 2. IMU Sensor 공부 https://www.slideshare.net/ssuserf5270f/imu-sensornanheekim 3. 그 외 1학년 시절 생각했던 학부 4년 계획 https://www.slideshare.net/ssuserf5270f/my-dreamver2016nanheekim 첨부파일 AX-12+Data_Sheet.pdf 파일 다운로드
참고: https://rednooby.tistory.com/56 [Python] 파이썬 super 기초 개념 및 예제 먼저 super를 사용하기전 상속, 오버라이딩 의 개념이 잡혀있어야 이해하기 쉽습니다. (상속, 오버라이딩 클릭시 페이지 이동) 개념 super() - 자식 클래스에서 부모클래스의 내용을 사용하고 싶을경우 사용 (무슨.. rednooby.tistory.com #super
논문을 읽어보며 정확한 정보인지 확인해보는 과정이 필요하다. 기존에 논문을 읽어본 다른 사람들의 글을 통해 (논문을 더 빠르게 핵심을 파악하기 위해) 사전 조사를 해보았다. FPN (https://arxiv.org/pdf/1612.03144.pdf) 어떤 논문인가? Object detecion을 위해 제안하는 네트워크에 관한 논문이며, Mask R-CNN과 같은 유명한 논문 등, FPN을 사용하여 다양하게 Detection, Segmentation 네트워크 성능을 향상시키고 있다. 왜 Pyramid 구조를 사용하는가? 다양한 Scale 변화에도 Robust한 Detection 결과를 얻기 위해 Pyramid 구조를 사용한다. 기존의 Pyramid 방식은 어떤 방식이 있는가? (a) 경우, Multi-scale에 강하지만, 각 층별로 모두 prediction을 실시하기 때문에 Memory 연상량이 많아져 실질적으로는 거의 불가능하다. (b)의 경우, CNN을 통해 특징을 추출하지만 최
1. CycleGAN의 단점 (1) CycleGAN은 모양을 바꾸기가 힘들다 -> DiscoGAN 참고 (2) 말 위의 사람 - > 사람, 말 둘다 얼룩 -> Dataset의 문제 -> distribution 문제 2. Domain Dataset 얼마나 사용해야할까? - 보통 1000장 사용 - 모네 1000장 - 400~500, 2000 도메인마다 다르다 - 대선토론 -> 웹툰은 다양성이 떨어져서 10000장 사용함 3. 다른 Application, Adaptation Idea (1) Colorization - Pix-pix dataset을 모으기 쉬워서 pix-pix로 테스트 해보았지만, 같은 랩에서 발표한 다른 논문이 성능 더욱 좋음 - Segmentation을 위한 CycleGAN을 사용하는 것보단, 바로 Colorization에 모델을 사용하는 것이 더 업무적으로 효율적이지 않을까? - GTA 에서 테스트해보았을 때, 실제 도로로 바꿔줄 수 있기 때문에 VGG-FCN보다 성
convolution layer output (Win-F+2P)/S+1 = Wout transposed convolutional layer output (Wout-1)X S - 2P + F = Win numpy Y, X, CH tensor CH, Y, X
https://kr.mathworks.com/help/deeplearning/examples/transfer-learning-using-alexnet.html AlexNet을 사용한 전이 학습 - MATLAB & Simulink - MathWorks 한국 문서 예제 함수 앱 비디오 MATLAB Answers 평가판 제품 업데이트 이 페이지의 내용은 이전 릴리스에 관한 것입니다. 해당 영문 페이지는 최신 릴리스에서 제거되었습니다. AlexNet을 사용한 전이 학습 이 예제에서는 사전 훈련된 AlexNet 컨벌루션 신경망이 새로운 영상 모음에 대해 분류를 수행하도록 미세 조정하는 방법을 보여줍니다. 1백만 개가 넘는 영상에 대해 훈련된 AlexNet은 영상을 키보드, 커피 머그잔, 연필, 각종 동물 등 1,000가지 사물 범주로 분류할 수 있습니다. 이 네트워크는 다양한 영상을 대표하는... kr.mathworks.com
Image Augmentations for GAN Training - 2020년 6월 4일 arXiv 공개 https://arxiv.org/pdf/2006.02595v1.pdf GAN 성능을 높이기 위한 Augmentation 기법 논의 DCGAN, BigGAN 하에 GAN의 학습 안정성을 높이기 위한 다양한 Augmentation 기법 적용해보고 얻은 인사이트 바탕 가이드라인 제시 참고: https://m.facebook.com/groups/255834461424286?view=permalink&id=1217536901920699 이호성 # Image Augmentations for GAN Training 논문 소개 안녕하세요, 최근 재미있는 제목의 논문을 발견해서 간단히 소개드립니다! 제목은 Image Augmentations for GAN Training 이며, 6월 4일 arXiv에 공개된 논문입니다. 구글 브레인 인턴과 구글 리서치 연구진이 작성한 논문입니다. 논문 링크:.
0. 영어 오픽, 텝스 0.1. 중국어 HSK 3급 1. 딥러닝 분야 코세라 자격증 - Machine learning, Deep learning, ... https://www.coursera.org/search?query=convolutional%20neural%20networks&isNewUser=true Convolutional Neural Networks 강좌 | Coursera 상위 대학교 및 업계 리더의 Convolutional Neural Networks 강좌 온라인에서 Convolutional Neural Networks and Deep Learning과(와) 같은 강좌를 수강하여 Convolutional Neural Networks을(를) 학습하세요. www.coursera.org 2. 그 외 기본 분야 정보처리기사 http://www.q-net.or.kr/crf005.do?id=crf00505&gSite=Q&gId=&jmCd=1320&examInstiCd=1 정보처리
NLP를 안다면 꼭 알아야할 모델 BERT https://arxiv.org/abs/1810.04805 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding We introduce a new language representation model called BERT, which stands for Bidirectional Encoder Representations from Transformers. Unlike recent language representation models, BERT is designed to pre-train deep bidirectional representations from unlabeled text by jointly conditioning on both l... arxiv.org End-to-End로 Object detection과 instance segmentat
Mask R-CNN 논문을 읽어보려고 하니, ResNet, FCN, FPN을 자세히 알고 있으면 좋을 것 같아 ResNet 리뷰 글을 쓰기로 마음먹었다. Skip connection, ILSVRC2015 1위로만 알고 있었던 ResNet을 더욱 자세하게 알아보기 위해서 논문을 읽어보았다. 전체적으로 꼼꼼히 읽지 않았지만 주목할만한 부분을 꼼꼼히 읽고 요약 정리해본다. 중요한 용어 소개 / 용어 뜻이 나오는 부분 / 논문에는 없지만 많이 부르는 용어 / " " 실제 논문에 나온 글 / 사진: 실제 논문에서 가져온 사진 Deep Residual Learning for Image Recognition (https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf) Driven by the significance of depth, a question a
별은 별의 길을 걷는다. 아주 짧고 빛나는 수많은 삶 중에, 그 삶 중에, 한 별이 꼭 붙잡고 놔주지 않아야하는 별빛은 무엇일까. 아무리 변덕이 죽 끓더라도 그런 별빛만한 별빛이 어디일까. 기약없이 위로하고 빛을 나누어 줄 때, 그 별은, 마음속 깊숙하게 별빛을 담아둔다. 비로소 밤이 되어 별이 밝은가 하늘을 보면, 그 별은 광명을 되찾았다.
주인의식 내가 진짜 그 회사의 오너인 것처럼 내가 실제 그 상황에 처한 것처럼 진정으로 진심으로 엄청난 집중력으로. 학생의 신분을 떠나 책임질 수 있는 사람으로.
현재 부족한 점(2020.06.28) 1. 전반적 문법 문제 풀이 연습 => 스타트 다 풀기 => 모든 문법이 섞여있는 기출 문제 풀어보기 2. 어휘 부족 => 노랑이 다 외우기 => 다시 시험치기 토익 시험 후기(2020.06.28) 1. 리스닝을 집중해서 못품(소리가 크나, 조금 울리는 형태) => 연습을 더 많이 할 것 2. 리딩은 18문제 못품 => 종이가 커서 더 잘 읽어짐 => c로 찍음 *결론: 리스닝 충분히 연습이 되어야 실전 실력 발휘, 리딩은 어휘, 문법 계속 준비
함수를 콜할때(Function Binding), 함수 정의를 연결하기 위한 방법으로 Static binding과 Dynamic binding이 있다. Static binding Dynamic binding Compile time에 결정되며, 실제로 포인트된 어떠한 버전의 클래스도 무시하고 Base Class의 함수를 선택한다. Execution time에 결정되며, 실제로 선택한 클래스(Object pointed)의 함수를 선택한다. virtual 이라는 method가 있다. Virtual Function(가상함수)는 기본 클래스(부모 클래스) 내에 선언되어, 파생 클래스(자식 클래스)에 의해 재정의(Override)될 수 있는 멤버 함수이다. Virtual 이라는 문구가 함수가 Override 될 수 있음을 알려주는 역할을 한다. <사용방법> Base class 에서 선언되고, Derived class에서 재정의된 Class 멤버 함수에서, (1) Base class 내에서 함수
딥러닝 모델을 작성하면서 생각해봐야 할점 1. 어떤 Task로 모델을 작성하며, 목표는 무엇인가? 2. 목표를 얻기 위해 필요한 Loss Function 및 모델의 Layer 구성의 이유는 무엇인가? 3. 모델의 Metric(평가 지표)는 어떤 것을 선택했는가? 왜 그것을 선택했는가? 많이 인용되는 논문은 어떤 논문일까? 1. meta algorithm -> good access, good accuracy 여기서 meta algorithm이란 두 가지 모델이 합쳐져 새로운 모델이 나온 것을 말한다. 2. many improvement 3. keep going to develop the algorithm(model) 4. easy to use 참고: https://www.youtube.com/watch?v=g7z4mkfRjI4
Model 관련 바로 사용할 수 있는 모델 무슨 모델인지는 알고 있지만 조금 더 공부해봐야하는 모델 FCN, MaskRCNN DeepLab v1, v2 CycleGAN, VAE ResNet, DCGAN STARGAN v1, v2, EfficientNet Faster RCNN YOLO v1, v2, v3, ... PSPNet, Panoptic DeepLab, CenterMask, PolarMask vid2vid, End-to-end Recovery of Human Shape and Pose 분야 관련 1) Generation 기술 연구 개발 - Deep Generative Model(GAN, VAE)을 기반으로 하는 이미지 생성 기술에 대해 연구하고 게임 개발 프로세스 효율화를 위한 Assistant AI 기술을 개발함. 관련 연구 분야로는 Image-to-Image Translation, Image Generation, Style Transfer, Domain Adaptation
아래는 저의 주관적인 답이니, 정확한 정답이 아닐 수 있으며 다양한 답이 나올 수 있는 질문도 있다고 생각합니다. 저와 같은 딥러닝 초보자 분들이 분명 생각해보면 좋을 질문을 모아보았습니다. (많은 질문에 답하다보니 점점 간단하게 답하고 있는 나의 모습 발견...) 공부하면서 궁금했던 질문들도 계속 업데이트해나갈 예정입니다. 질문 Reference는 맨 아래에 보시면 관련 링크를 올려놓았습니다. 또한 모르는 답에 대해서 참고한 부분도 함께 올려놓았습니다. 더 좋은 답변이나, 틀린 답변이 있다면 언제든지 알려주세요. 다음은, 남세동님께서 정리한 "1년미만의 딥러닝 신입에게 물어보면 좋을 질문 리스트" 입니다. 1. 요즘 Sigmoid 보다 ReLU를 많이 쓰는데 그 이유는? 수렴이 빠르고, gradient vanishing 방지를 위해 많이 사용한다. Sigmoid의 양 끝을 보면 기울기가 0으로, 학습이 느려질 수 있다. ReLu의 0보다 큰 부분을 보면, 경사가 0으로 수렴하기엔
한 사람의 인생 스토리가 담겨 있고, 자신의 미래를 상상하면서 보면 더욱 큰 조언이 되어 돌아오는 영상 https://www.youtube.com/watch?v=DTuFW2TJ7sg
이전에도 이 강의를 들었는데 흥미로 들어보는 것과 공부를 위해 들어보는 것은 차이가 있는 듯 싶다. 내 머리속 지우개를 방지하기 위해서 이렇게 기록으로 남긴다. stanford university에서 justin johnson 님(https://web.eecs.umich.edu/~justincj/)이 강의하신 Detection and Segmentation 강의를 정리해보았다. 글 아래에 가면 동영상 정보(https://youtu.be/nDPWywWRIRo)를 올려놓았다. 1. Sementic Segmentation 2. Classification + Localization 3. Detection 4. Instance Segmentation 표시 : 딥러닝 방법론, 이론 / 모델 / 중요한 부분 / 더 알아볼 부분 / 소제목 / 내용 1. Sementic segmentation - 같은 카테코리의 Object를 나누지 않는다. - Idea 1: Sliding window를 이용해서
Segmentation 픽셀별(pixel level) classification이라 생각할 수 있다. FCN https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Long_Fully_Convolutional_Networks_2015_CVPR_paper.pdf CAE 이런 느낌. https://github.com/arthurmeyer/Saliency_Detection_Convolutional_Autoencoder CAE(convolutional auto encoder)의 아이디어를 빌려 픽셀별 labeled data와 생성한 output mask data를 비교하여 loss를 계산한다. CAE의 아이디어란 AE와 같은데, feature를 구하는(feature extraction) Encoder 부분과 다시 복원하는 Decorder 부분으로 이루어져 있다. feature extraction 시 Dense layer(full
모델 정리 1. Fully Convolutional Networks for Semantic Segmentation(FCN) - Arxiv 2014, CVPR 2015, TPAMI 2017 2. Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs(DeepLab) - Arxiv 2014, ICLR 2015 3. Multi Scale Context Aggregation by Dilated Convolution(DilatedConv) - Arxiv 2015, ICLR 2016 4. DeepLab:Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution and Fully Connected CRFs(DeepLab v2) - Arxiv 2016, Accepted to TPAMI 5. Pyramid Scene Parsing
적은 데이터 혹은 완전하지 않은 데이터로 학습하는 방법은 없을까를 알아보던 중, Supervised learning보다는 뛰어난 성능이지는 않지만, unsupervised learning에 가까운 여러 학습 분야들을 알아보고자 간단한 서치를 시작했다. 결론적으로 3가지 모두 같은 목적에서 조금씩 다른 방식, 상황으로 학습을 시도하고 있었다. 비슷한 이론끼리 결합시켜 학습하기도하고(Few-shot learning + Self supervised learning) 어떤 부분에서는 하위분야에 들어가기도 하고(Weakly supervised learning < Self supervised learning), 조금 더 정리가 필요한 상황이다. 일단 현재까지 이해한 부분에 대해서 정리해보았다. Few shot learning 1장 == one shot == 1 class 2장 == two shot == 2 classes paper: optimization as a model for few-sh
LNDb 챌린지는 흉부질환 학술단체인 플라이슈너 소사이어티(Fleischner Society)가 지난 2017년 제안한 관리 지침을 기준으로 흉부 CT(컴퓨터단층촬영) 영상 분류 알고리즘을 개발하는 실력을 겨누는 장입니다. 참가팀은 수백 장의 CT 영상에서 폐결절의 위치와 그 크기를 정확하게 파악할수록, 서로 상충 관계에 놓여 있는 재현도(recall)[1]과 정밀도(precision)[2]를 잘 조절하여 주어진 지침에 따라 추천을 정확하게 할수록 높은 점수를 받게 됩니다. 공동 연구팀은 3D-UNet(nnUNet)[3]에 다양한 어그먼테이션(augmentation), 앙상블(ensemble), 전처리(preprocessing) 기법을 적용했습니다. 특히 카카오브레인이 고안한 SAOL(Spatially Attentive Output Layer for Image Classification)를 추가, 위양성(false positive)[4]을 줄이는 데 큰 도움이 됐다고 설명했습니다.
0. 클린 코드 쓰기 공부: 나만의 클린 코드 방법은? (1) 가장 효율적인 알고리즘을 짠다: 최대한 반복되지 않으며(최소한의 메모리, 핵심 기능), 최대한 알아보기 쉬우며, ... (2) 기능별 주석 처리 (3) 자주 사용되는 구조 및 기능은 클래스화, 함수화 (4) 규모가 커지면 여러 디자인 패턴을 참고: 예를 들어 다른 파일의 한 클래스 공통 인스턴스를 쓰기 위해서 싱글톤 패턴을 쓰는... 1. docstring, 기능별로 주석처리 2. error: try, except 구조 3. 클로져: 변수에 함수를 대입하여 사용하는 방법 4. 제너레이터: 시퀀스 데이터를 선언할 때 주로 사용, range() 5. 데커레이터: 함수를 변형하지 않고 재사용하거나 변경하여 사용하고 싶을 때 6. 상속, 오버라이드 7. 함수형 프로그래밍과 객체 지향형 프로그래밍 8. 파이썬 클린코드 책 읽기 / C++ 최적화 책 읽기 https://www.samsungsds.com/global/ko/news/s
Classification, Detection 성능 평가를 위해서는 다음의 metrics를 많이 사용합니다. 기본적인 metric들은 꼭 알아두어야 하며, 장단점을 추가로 안다면 성능 평가를 할 때 잘 사용한 지표인지 알 수 있습니다. Prediction \ Ground Truth True False True True Positive False Positive False False Negative True Negative Ground Truth를 틀리게 예측하게 되면 False, 그런데 True로 예측하면 Positive가 됩니다. -> False Positive 1. Precision True라고 예측한 데이터 중에서 실제 True인 데이터 수 찾은 Object가 정확한가? TP/(TP+FP) 2. Recall 실제 True인 데이터에서 True라고 예측한 데이터 수, Object를 얼마나 잘 찾는가? TP/(TP+FN) 3. F1 score precision과 recall의 조화
시험을 고민 중인 딥러닝 개발자가 될 사람들에게... 결론적으로, 정보처리기사나 리눅스마스터 자격증 공부를 하는 것을 고민 중이라면,시간내서 한번 공부해보라고 추천해드리고 싶습니다! '왜 정보처리기사 자격증을 따지?', '왜 리눅스 마스터 자격증을 따지?', '자격증은 자격증일 뿐, 실전에 도움되는 일일까?' 라는 생각이 가득했었으나, 저는 공부해보기로 마음먹었습니다. 물론 기본중에 기본인 이론들이겠지만, 저와 같은 고민을 하는 대학생/ 졸업생/ 완전 신입 직장인/ 저의 친구(동기, 동아리 선후배)들을 위해서 쓰는 주관적인 글임을 미리 알립니다. 정보처리기사 시험을 응시하는 이유? 1. 기본 CS 과목 지식을 얻을 수 있다. 저는 프로그래밍 언어, 운영체제 과목 외 소프트웨어공학, 네트워크, 데이터베이스 관련 지식 부족한 상태였습니다. CS 지식이 부족한 것을 알겠지만, '무조건 공부해야 하는 분야인가?' 라는 생각을 하게 되었습니다. 실제로 제가 공부 중인 분야에 도움이 되는가에
Mask Loss를 구할 때, 각 클래스 K모두에 대해서 왜 binary cross entropy를 하는가? 정답은 논문 글을 제대로 읽으면 이해할 수 있었다. Mask R-CNN 논문 중 일부 - Mask R-CNN = Faster R-CNN + FCN -> Faster R-CNN 에서 classification을 하기 때문에 Softmax 수행 X -> Mask pixel 인지 아닌지만을 binary cross-entropy -> 클래스간 경쟁없이 없어 성능과 연산량 이점있을 것으로 예상 -> 일반화 하면 각 클래스 K 모두에 대해서 적용하지만 Mask Loss 에는 K번째 마스크만 정의 - RoI가 ground-truth인 각 클래스 -> 말 RoI에는 말 Mask 만 적용 -> 즉, Mask pixel인지 아닌지만을 학습 -> FCN과 달리 말인지 사람인지 고양이인지 경쟁X
1. POOLING LAYER 를 왜 사용하는가? 0 1 2 5 2 4 3 4 6 0 7 6 5 6 0 2 Max Pooling 후 4 5 6 7 여러 모델에서 중요한 features를 뽑아내기 위해, pooling을 통해 점점 width, height를 줄여가는 형태로 많이 사용한다. 사이즈를 줄여가기 위해서 pooling을 사용한다는 말을 하기도하는데, 정확히는 잘못된 말이다. same padding을 통해 유지하기도 한다.(inception network의 예시) 2. Pooling layer의 동작 이미지의 각 채널상 독립적으로 작용한다. 3. Max pooling의 장점 많은 사람들이 쓰면서 좋은 결과를 얻었다고는 하나, 잘 작동되는 진짜 이유를 모른다. filter 사이즈에 '가장 큰 수'라는 대표값을 얻어서 == 중요한 features를 잘 뽑아내서 학습이 잘되게 하지 않을까 어림짐작하고 있다. [더 생각하기] 웹툰 이미지에 POOLING LAYER를 각 채널당 사용하면
C++ 풀이(DP) 처음에는 1, 오른쪽 아래로 이동하며 이전의 값을 더해준다. 초등학교때 배웠던, 갈 수 있는 모든 경우의 수를 구하는 방법으로 구해준다. -1은 갈 수 없는 길, 나머지는 갈 수 있는 길의 경우의 수를 구하는 방법 -1 1 1 1 1 -1 1 1 1 2 주의(1) for(y){for(x)} 주의(2) %1000000007 overflow #include <string> #include <vector> using namespace std; int map[101][101]; int solution(int m, int n, vector<vector<int>> puddles) { //m==x==[][x] for(int sz=0; sz<puddles.size(); ++sz) map[puddles[sz][1]-1][puddles[sz][0]-1] = -1; for(int x=0; x<m; ++x){ if(map[0][x]==-1){ for(int x1=x; x1<m; ++x
이 글을 "왜 쓰는가?" 앞으로 공부하고 싶은 분야에 대해 전문 기업에게 물어보며, 느낀 부분을 담아두기 위해 정리한 개인 글입니다. 도움이 될지는 모르겠지만 만약에 관심 분야라면 30초 정도 투자하셔서 읽어보는 것도 좋을 것 같습니다. 또한 개인적인 #참관 후기이며, 잘못된 내용이 있을 수 있습니다. 생각 정리에 대한 내용은 대부분 AI와 관련된 내용입니다. 개인의 관심 분야(AI)에 대해서 주로 기업 부스 방문을 하였고, 많은 기업들이 땀흘려 준비했겠지만 짧은 시간내 모두 둘러볼 수 없었다. ㅠ.ㅠ 그리고 중요한 것은 사진을 하나도 못 찍었다 ㅎㅎ 엑스포 "내용" 2020.10.27(화)~10.29(목) #AI #EXPO, 2020.10.27(화)~10.30(금) #SEDEX 가 열렸다. AI EXPO(코엑스 D홀)에서는 많은 기업들이 AI를 연구하고 그에 대한 설명, 홍보를 많이 했고 SEDEX에서는 #반도체, #모션컨트롤, #자동차산업전 까지 (제가 알기론) 3개 분야를
:일반화한다. 1. Dropout regularization 2. Inverted Dropout Dropout의 변수로 Keepprob 라는 것을 두어, Keepprob(Ex. 0.8)라는 확률로 층마다 유닛을 유지할지를 결정한다. Dropout = np.random.rand(Actiovationlayer.shape[0], Actiovationlayer.shape[1]) # Step 1: initialize matrix Dropout = np.random.rand(..., ...) Dropout = (Dropout < keep_prob).astype(int) # Step 2: convert entries of Dropout to 0 or 1 (using keep_prob as the threshold) Actiovationlayer = Actiovationlayer * Dropout # Step 3: shut down some neurons of Actiovationlayer Act
: 우선순위, Training시 먼저 고려해야할 점 1. Learning rate 2. Momentum, Mini batch, size, Hidden units 3. Layers, Learning rate decay 4. beta1 0.9, beta2 0.999, epsilon 10^(-8) : Hyperparameter를 뭐를 사용할까? 1. Random search 후 결과 좋은쪽에서 밀집해서 재탐색 - 아래 네모 사각형(2차원, 하이퍼파라미터 2가지-2축를 탐색하기 위해 고려, Orthogonalization, 직교화) - 아래 하늘색(Random search, Random sampling)이 빨간색(Grid search)보다 더 많이 시도할 수 있다. - 추후 결과가 좋은 쪽에서 밀집하여 재탐색 : Trainingset과 Testset의 비율은 어떻게 해야할까? 2,000장 미만인 Small dataset인 경우, 60%, 20%, 20%를 많이 사용하나, 1,000,000장
Inception Network를 공부하다보면, 왜 Inception이라고 하는지 궁금했다. In this paper, we will focus on an efficient deep neural network architecture for computer vision, code named Inception, which derives its name from (…) the famous “we need to go deeper” internet meme. 논문 저자는 Inception 이라는 영화를 언급한다. 영화에서 주인공은 꿈 속에서 꿈을 꾸기도 하는데, 꿈에서 꿈으로 계속 깊게 깊게 들어간다. 이와 비슷하다고 생각들어 저자는 Inception Network라 하였다.
항상 저의 블로그 방문해주시고 좋게 봐주셔서 감사합니다. 처음에는 공책보다 자주 꺼내볼 수 있는 블로그라서 기록을 하기 시작했는데, 글을 하나하나 올리며 다른 많은 개발자들에게도 많은 도움이 되었으면 좋겠다고 생각했습니다. 현재까지 약 4500여명 정도 방문한 작은 블로그이지만, 앞으로 더욱 머신러닝을 연마하여 열정 있는 정보들로 채워가겠습니다. 2020 마이 블로그 리포트 올해 내 블로그 대표 키워드 확인하고 네이버페이 받아가세요! campaign.naver.com
기존 아나콘다 가상환경에서 cuda, cudnn, pytorch를 설치하는 방법을 정리하였다. 로컬에서 nvidia의 cuda, cudnn을 설치할 수도 있지만, 프로젝트마다 원하는 cuda, cudnn, pytorch 버전을 설정할 일이 있었기 때문에, anaconda 가상환경에서 설치하는 방법을 알아보았다. 일반 사용자라면 자신의 GPU에 맞는 버전을 설치하여야한다 결론부터 말하자면 아래 과정을 순서대로 거쳐 설치하였지만 한번 쭉 살펴보고 5번을 한번 테스트해보기를 추천한다. 저자는 원하는 버전이 cuda10.1이상 pytorch 1.5이상 이었기때문에 서치하는 과정을 통해 저런 순서로 진행하게 되었다. 1. GPU 호환 Cuda 버전 확인하기 https://developer.nvidia.com/cuda-gpus 권장하는 버전이 아니더라도, 다른 버전을 설치할 수 있는 것으로 알고 있다. 프로젝트에 맞는 pytorch, tensorflow버전을 설치할 때 보면, 각 프레임워크 버
Segmentation Model 학습을 돌리다보면 Class imbalance 문제가 자주 발생하곤 한다. 그래서 중요한 개념인 Class imbalance 문제를 공부하고자 글을 쓰게 되었다. 다음과 같을 때 Class imbalance의 경우를 정리하였다. 다음의 경우는 실제 회사 상황과 다를 수 있으며, Class imbalance 경우를 위해 예시를 든 것이다. Case 1) 반도체 회사에서 당신은 일을 하고 있다. 반도체 수율을 예측해야하고, 당신은 반도체에 가성불량, 진성불량 오류를 정확히 따져야하는 비전 프로그램을 작성해야한다. '결함이지만 결함으로 예측하지 못하는 것'과 '결함이 아니지만 결함으로 예측하는 것' 중 전자의 문제에서 딥러닝 머신은 더욱 정확해질 필요가 있다. 하지만, 결함이 있는 반도체 Chip은 결함이 없는 반도체 Chip보다 데이터가 현저히 적다. Case 2) 웹툰 회사에서 당신은 일을 하고 있다. 웹툰 인물의 Segmentation 결과를 얻기를
이전 포스트에서 클래스 불균형 문제에 대해 Case를 들어보았다. 이제 다음의 해결책으로 한번 불균형 문제를 풀어볼 수 있다. 앞서 말한 case 1, 2에 대해서는 다음의 1, 2, 5번 솔루션을 사용해볼 수 있다. case 3에 대해서는 다음의 3, 4, 5번 솔루션을 사용해볼 수 있다. 1) Oversampling Minority class 수를 부풀려서 Majority class와 비슷한 수로 만드는 방법이다. Sampling을 하는 방법은 도메인마다 차이가 있을 것이다. Vision 분야라면 Augmentation을 할 수도 있고, 자연어처리 분야라면 텍스트문장을 더 만들어낼 수 있다. 이때 주의할 점은 원래 가지고 있는 Minority의 성질을 그대로 가지고 있도록 Oversampling 하는 것이다. oversampling하는 방법 중, 성능이 어느정도 잘 나오는 방법이 있다. Smote를 소개한다. smote는 데이터를 N차원에 그리고, Minor한 데이터를 유사하게
구글 머신러닝 부트캠프 4개월간의 대장정.. 축! 졸업! 세상에는 참 멋있는 분들이 많구나를 느끼고 간다. 앞으로도 힘찬 미래를, 꿈꾸는 미래를 많은 이들이 이루었으면 좋겠다. 물론 나도 포함 ><! linkedin.com/in/난희-김
0216 50분 풀이/프로그래머스(소수 찾기) 1. string.length 2. #include <string> -> stoi(string) 3. / 몫, % 나머지 50분 풀이/프로그래머스(다리를 지나는 트럭) 1. queue는 인덱스 접근 안됨 -> deque 2. deque의 front는 첫번째 원소, back은 마지막 원소 3. vector는 puch_back, pop_back만 되는 stack 같은 stl 0224 1시간 26분 풀이/백준(14891번, 톱니바퀴) 1. input string으로 받기, input에서 -48해야 0또는 1로 됨 2. queue는 front가 pop 부분 3. rotate는 rbegin이 오른쪽으로 회전 rotate(tooth[j].rbegin(), tooth[j].rbegin() + 1, tooth[j].rend()); 4. is_rotate 함수에서 +1, -1 실수 0226 1시간 15분 문제 풀이/SWExpert(5648번, 원자소멸시
프로그래머스 - 순위검색 문제(https://github.com/nh9k/algorithm-problem/blob/master/python/2021_programmers_2021_kakao_ranking_search.py)를 푸는 도중 lower bound를 공부할 필요가 있어졌다. 효율성 검증 문제가 있다면 대부분 binary search 문제인것 같다. lowerbound란 찾은 숫자중 인덱스가 가장 작은 값이다. [1,2,3,3,5] 중에 3인 수를 찾는다면, lowerbound는 index 2, upperbound는 index 3 # binary search left = 0 right = len(parsing_i[ccon]) while left < right: mid = (left + right) // 2 if parsing_i[ccon][mid] >= poi_q: right = mid else: left = mid + 1 answer.append(len(parsing_i[c
binary search tree binary search tree, array=[1,2,3,4,5,6,7,8,9,10] 1. input 원소 개수 N? N=len(array) N = len(array) = 10 2. 높이 H? H = floor(log2(N)) H = floor(log2(N)) = floor(log2(10)) = floor(3.xxx) = 3 10 < 2^4 이므로 log2(10) = 3.xxx 3. 지정할 배열 크기? 1 << (H+1) 1 << (H + 1) = 1 << (3+1) = 1 << 4 = 16 16 8 4 2 1 1부터 왼쪽으로 한칸씩 비트연산 4번 이동하면 1 << 4 = 16 segment tree 부분합을 구하기 위해서 사용하는 tree. segment tree, array = [0,1,2,3,4,5,6,7,8,9] segment tree의 index 순서(노드 번호) 1. input 원소 개수 N? N=len(array) N = len(arr