목록전체 글 (55)
https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸을 의미한다. r과 c는 1부터 시작한다. 이 도시에 사는 사람들은 치킨을 매우 좋아한다. 따라서, 사람들은 "치킨 거리"라는 말을 주로 사용한다. 치킨 거리는 집과 가장 가까운 치킨집 사이의 거리이다. 즉, 치킨 거리는 www.acmicpc.net 문제를 읽었을 때 전반적으로 어렵거나 이해가지 않는 내용은 딱히 없었다. 전체 치킨집에서 M개만큼 선택할 수 있는 모든 경우의 수를 ..
https://www.acmicpc.net/problem/15685 15685번: 드래곤 커브 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커브의 시작 점, d는 시작 방향, g는 세대이다. (0 ≤ x, y ≤ 100, 0 ≤ d ≤ 3, 0 ≤ g ≤ 10) 입력으로 주어지는 드래곤 커브는 격자 밖으로 벗어나지 않는다. 드래곤 커브는 서로 겹칠 수 있다. 방향은 0, 1, 2, www.acmicpc.net 처음 문제를 이해할 때 드래곤 커브가 다음 세대로 가는 경우 끝 점을 기준으로 시계 방향으로 90도 회전시킨다는 말을 반대로 이해해..
https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터 시계방향 순서대로 주어진다. N극은 0, S극은 1로 나타나있다. 다섯째 줄에는 회전 횟수 K(1 ≤ K ≤ 100)가 주어진다. 다음 K개 줄에는 회전시킨 방법이 순서대로 주어진다. 각 방법은 두 개의 정수로 이루어져 있고, 첫 번째 정수는 회전시킨 톱니바퀴 www.acmicpc.net 문제에서 제시한 조건을 정리하면 아래와 같다. - 현재 톱니바퀴가 회전하지 않는다 -> 옆에 있는 톱니바퀴도 회전하지 않는다. (이 ..
https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net Greedy 알고리즘은 가장 큰 것, 작은 것 등 원하는 방향을 기준으로 규칙을 지키면서 접근하면 된다. 정렬 알고리즘을 함께 사용하는 경우가 많다. 돈을 인출하는데 필요한 시간의 합이 최소값이 되도록 해야 하므로 돈을 인출하는데 가장 많은 시간이 걸리는 사람은 마지막에 인출해야 한다. 마찬가지로 돈을 인출하는데 가장 적은 시간이 걸리는 사람이 가장 먼저 돈을 인출하는 것이 좋다. 따라서 우선 오름차순으로 정렬한 뒤 접근하는 ..
케라스를 사용해서 만든 모델은 모두 케라스 레이어로 이루어져 있다. 만약 중간에 텐서플로우의 레이어를 사용하고자 한다면 텐서플로우 레이어를 케라스의 Lambda 레이어로 감싸주어야 한다. import numpy as np import tensorflow as tf from keras import Input, Model from keras.layers import Lambda x = Input((224, 224, 3)) h, w = 299, 299 y = Lambda(lambda inputs: tf.image.resize_bilinear(inputs, tf.stack([h, w]), align_corners=True))(x) model = Model(inputs=x, output=y) model.summa..
실제로 SVM을 사용할 때 중요한 부분에 대해 알아본다. 요즘에는 SVM을 쉽게 사용할 수 있는 좋은 라이브러리들이 많으니 처음부터 구현할 필요 없이 이를 통해 SVM을 쉽게 사용할 수 있다. 그러나 이러한 라이브러리를 사용한다 하더라도 우리가 해야 하는 것들이 있다. 첫째 C, 𝝈 등의 파라미터 값을 선택해야 한다. C, 𝝈에 따라 bias/variance effect가 달라질 수 있기 때문에 적절한 값으로 잘 선택해야 한다. 둘째, 어떤 커널을 사용해야 할지 선택해야 한다. 물론 커널을 사용하지 않을 수도 있다. 이러한 경우를 linear kernel이라고 부른다. SVM을 사용할 때 Linear kernel을 사용한다는 뜻은 커널을 사용하지 않는다는 뜻이다. 때론 linear kernel을 사용하는..
SVM을 Complex nonlinear classifier로 사용하기 위한 Kernel에 대해 알아본다. 다음과 같은 data를 잘 분류하는 Non-linear decision boundary가 있을 때, 이와 같은 boundary는 오른쪽과 같은 굉장히 복잡한 다항식을 사용한 모델일 것이며 이때 가설 h(x) 값이 0 이상이면 1, 그렇지 않으면 0으로 예측할 것이다. 그리고 x1, x2, x1*x2의 feature를 f1, f2, f3와 같이 다른 표기법으로 나타내어 h(x)를 표현할 수 있다. 컴퓨터 비전 문제를 풀 때 굉장히 복잡한 고차 다항식 모델을 사용하게 될 것이고 이러한 모델은 계산량이 매우 expensive하다는 단점이 있다. 그럼 f1, f2, f3와 같은 새로운 feature를 잘 ..
지도학습에서 자주 사용하는 알고리즘 중 하나인 SVM에 대해 알아본다. SVM에 대해 알아보기 전 익숙한 로지스틱 회귀를 다시 보자. 로지스틱 회귀에서 가설 h(x)의 정의는 시그모이드 함수를 사용하였다. 만약 y=1인 data가 있을 때 정확히 예측하고 싶다면 h(x)의 값이 1에 가까워야 한다. 다시 말해z가 0보다 매우 클 수록 1에 가까워지게 된다. 반대로 y=0인 데이터가 있을 때는 h(x) 값이 0에 가까워지길 원한다. 따라서 z값이 매우 매우 작은 값이 될 수록 좋다. 로지스틱 회귀의 cost 값은 다음과 같다. Y=1일 때 z값은 매우 클 수록 좋다고 했다. 그 이유는 z가 크면 클 수록 아래에 있는 cost 값이 점점 줄어들기 때문이다. 이제 cost function을 조금 수정하여 직선..