본문 바로가기

분류 전체보기311

16234. 인구이동 삼성 SW역량 테스트 기출문제. BFS를 사용하는 완전탐색 문제이자, 주어진 규칙을 잘 구현하는 시뮬레이션 문제이다. 문제 그대로만 하면 된다. BFS의 결과로 최소 신장트리(Minimum spanning tree)가 나오는데, 그 트리가 바로 하나의 연합이다. 처음에 문제를 보고, 하루에 연합이 2개이면 인구이동도 2번인가 했었는데 아니었다. 하루에 인구이동이 일어났으면 연합의 개수에 상관없이 그냥 인구이동이 한번 추가 되는 것이다. 무튼, 연합이 만들어지면, 그 node들을 하나의 vector에 저장해놓고, 인구이동값을 각 node에 대입해주면 된다. 그래서 코드는 크게 bfs()와 immigrate()로 나뉜다. #include #include #include #include using namesp.. 2019. 9. 28.
[최단경로] 다익스트라(Dijstra) 알고리즘 30. 최단 경로 알고리즘 BFS와 구현방법이 상당히 비슷하다. 다익스트라 알고리즘 다익스트라(Dijstra, 데이크스트라) 알고리즘은 다음과 같다. d[v]는 시작점 s로 부터 그래프의 모든 점까지의 최단거리이다. 아이디어는 BFS와 비슷한데, 가중치가 붙어있는 그래프를 다루므로, queue에 넣을 때는 (지금까지 누적 cost, 다음점)을 넣어준다. 매번 while문의 처음에서 cost가 최소인 점을 선택하는 이유는, 최단 거리가 되는 가능성이 있는 점들을 먼저 탐색하고 d[v]를 기록해주기 위함이다. 이렇게 해서 S 안에 다른 원소가 뽑혀 이미 기록된 d[v] 과 비교하여 더 크다면, 무시해주면 된다! 그래프를 직접 그려보면서, 알고리즘을 이해하는 것이 효율적인 것 같다. 이렇게 해서 직접 코드를 .. 2019. 9. 27.
[DL] 딥러닝 성능 향상(전처리, 가중치초기화, 모멘텀, 활성함수) 성능 향상을 위한 요령 들어가기 전에 한가지 명심해야 할 사항은 다음의 방법들이 절대적인 것이 아니라, 경험규칙(Heuristics)에 기반하므로 자신에게 주어진 데이터에 잘 맞을 지는 실험을 통해 알아보야 한다. 1) 데이터 전처리 특징값이 모두 양수(또는 모두 음수)이거나 특징마다 값의 규모가 다르면, 수렴 속도가 느려질 수 있다. $$ w = w - \sigma x $$ 그레이언트 업데이트 값은 입력(x) 부호에 영향을 받기 때문이다. 모든 x가 양인 상황에서 어떤 오차역전파 σ값은 음수인 상황에는 양의 방향으로 업데이트 되지만, σ값이 양수인 상황에서는 음의 방향으로 업데이트 된다. 이처럼 여러 가중치가 뭉치로 같이 증가하거나, 감소하면 최저점을 찾아가는 경로를 갈팡질팡하여 수렴 속도 저하로 이어.. 2019. 9. 24.
17143. 낚시왕 시뮬레이션 문제. 처음엔 쉬울 줄 알았지만, 하나하나 구현하며 오류가 많아 실제로 푸는데는 꽤 오래걸렸다. 해결방법은 문제에 주어진 대로 코드를 쭉 구성해가면 된다. 우선, 시간복잡도를 계산했을 때, 0 낚시왕이 모든 열을 걸어가는 시간 O(N) 1 낚시하는 시간(모든 행을 살핌) O(N), 2 맵을 다시 만드는 시간 O(N^2), 3 모든 상어에 대해 O(N^2) 3-1 상어가 이동하는데 걸리는 시간 O(N) 따라서 최악은 O(N^4)이 걸린다. 100x100x100x100 = 1억이므로 시간 내에 해결이 가능하다고 생각했다. 상어가 있는 물을 w[101][101]로 만들고, 1. 낚시왕이 오른쪽으로 한 칸 이동한다. C(column)을 바꾸어가며, 2. 낚시왕이 있는 열에 있는 상어 중에서 땅과 제일.. 2019. 9. 24.
[GAN] Data Augmentation Using GANs, 2019 Data Augmentation Using GANs FHKS Tanaka, arXiv cs.LG, 2019/04/19 Abstract GAN은 데이터 증식을 위해 쓰일 수 있다. 1) 클래스가 불균형한 데이터셋에서 부족한 클래스를 보충하기 위해, 2) 데이터가 privacy에 관련한 민감한 정보를 포함할 때, 합성이미지로 이를 극복한다. 본 논문은, Generator로 저자가 직접구현한 간단한 모델을 이용하고, Discriminator로는 Decision Tree를 이용하여 GAN으로 만든 합성 데이터가 실제 데이터를 대체할 수 있을지 연구한 결과이다. 1. Introduction Good 데이터 셋을 가지는 것은 모델의 학습을 위해 참 중요한 요소이다. 1) Imbalanced 데이터에서, oversa.. 2019. 9. 21.
14889. 스타트와 링크 사람은 총 N명, 최대 20명 이를 순열로 늘어 놓아서 앞에는 스타트팀, 뒤에는 링크팀으로 하면 중복계산도 상당히 많고, 총 경우의 수는 20! = 상당히 큰 수이다 >>>>>>>>>>>> 1억 당연히 시간초과가 난다. 문제를 풀면서 자연스럽게 생각할 수 있는 것은 사실 조합이다. 20C10 는 10! 보다 작을 것이라는 것을 예측할 수 있는데 실제로 그 결과는 10!(3백만)보다 훨씬 작다. 18만정도이다. 여기에 각 팀 스코어를 계산해야하는 시간이 (N/2) x (N/2) 이므로 100이라고 하면, 1800만 < 2초 안에 가능하다. 내가 맨 처음에 한 것은, 예를들어 1, 2, 3을 뽑았으면 총 1, 2, 3, 4, 5, 6 인 set에서 1, 2, 3을 뽑는 것이다. 즉 4, 5, 6을 만드는 것.. 2019. 9. 21.
[HTML] 서브라임텍스트에서 미리보기 단축키 설정 Sublimetext3에서 HTML 작성 후, 웹에서 미리보기를 하고 싶을 때, 우클릭 View in Browser을 해도 되지만, 이는 프로그래밍의 손 맛을 떨어뜨리죠!! 이제는 alt + ctrl + V 단축키로 바로 미리보기를 하도록 해봅시다. Step 1 Package Control 설치 ctrl + ` (Show console) Package Control Website 복사 Enter (몇 초의 시간 소요) Step 2 View in Browser Package 설치 ctrl + shift + p "Install Package" 검색 Package Control : Install Package 엔터 View In Broswer 엔터 단축키 Alt + Ctrl + V로 가능! 단, 기본값은 파이.. 2019. 9. 20.
14888. 연산자 끼워넣기 같은 것을 포함한 순열이라는 느낌을 받고, 이를 구현해보려고 하다가, 잘 안되서 결국 못했다. 조합을 여러번 하는 것으로 구현해보려고 하다가, 너무 복잡해지는 감이있어서, 다시 완전탐색을 시도. 연산자는 최대 10개이고, 같은 연산자라도 다 다르다고 취급하고, 순열의 수를 생각해봤을 때, O(N!)의 시간복잡도를 가진다. 10! = 3,628,800 이므로 충분. 처음에는, 마지막 기저조건(return)에서 모든 결과값을 계산하는데 O(N)시간을 써먹어서 시간이 좀 느리게 나왔다. #include int N; int nums[12]; char opers[12]; int chk = 1 2019. 9. 19.
[STL] erase 위와 같은 오류를 해결해봅시다. Expression: cannot increment value-initialized map/set iterator 이는 iterator에 문제가 생겨 증가를 할 수 없다는 것인데요.. erase() 를 알아봅시다! STL에서 컨테이너를 이용할 때, 컨테이너 안 요소를 삭제합니다. 같은 기능을 하는 remove도 있지만, 쓰임방법과 쓰임새가 조금 다르지요. 일단 큰 차이는, remove(요소)인 반면, erase(요소의 반복자) 입니다. 다음은 오류가 나는 코드 입니다. // set 안에 있는 모든 요소를 제거합니다. set c; // c 안에 1, 2, 3 등 요소가 있다고 가정합시다. for (auto iter = c.begin(); iter != c.end(); ++i.. 2019. 9. 19.
[백트래킹] 백준 2580 스도쿠 백트래킹을 알고 있다면, 그대로 하면 풀린다! 원리는 간단하다, 모든 경우를 탐색하는 것인데 빈칸에 들어갈 수 있는 후보자를 찾은 뒤, 처음 후보자를 놓고, 다음 빈칸을 같은 방법으로 탐색한다. 그러다가 막히면(후보자가 없다거나) 다시 돌아오면 된다 (백트래킹!) 주의할 것은, 스페셜 져지문제인 만큼 답이되는 후보 제일 먼저 발견한 것을 찾으면, 바로 프로그램을 종료하면 된다. 헤더파일에 있는 exit(0)함수를 썼다. 후보자를 찾기 위해 가로세로를 탐색하고, 사각형을 탐색하는데 아이디어만 잘 내면 될 듯하다! #include #include #include #include using namespace std; int N = 9; int a[9][9]; int dx[] = {-1, 1, 0, 0}; in.. 2019. 9. 19.
728x90