TIL💡(277)
-
[백준] 2631번: 줄세우기
https://www.acmicpc.net/problem/2631 2631번: 줄세우기 KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기 www.acmicpc.net 처음에 보면 당황스러운 문제일 수 있다. 문제 경험이 많이 없다면 이거 어떤 아이를 어디로 옮기는지 브루트 포스로 풀어야 하는지 감조다 찬 올 수 있다. 하지만 문제를 조금씩 풀다보면 상당히 익숙한 느낌을 지울 수 없다. 분명 나는 이전에 비슷한 문제를 푼 적이 있단 말이다!! 그래서 움직이는 아이와 움직이지 않는 아이를 따로 표시해보니, 무슨 알고리즘을 써야하는지 감이 왔다. 바로 증가하는 수열의 최대..
2022.12.09 -
[백준] 5073번: 삼각형과 세 변
https://www.acmicpc.net/problem/5073 5073번: 삼각형과 세 변 각 입력에 맞는 결과 (Equilateral, Isosceles, Scalene, Invalid) 를 출력하시오. www.acmicpc.net 가볍게 브론즈로 풀었다. 대신 문제를 어떻게 간결하게 논리적으로 깔끔하게 풀 수 있는가에 대해서는 충분히 고민해보면 좋은 문제이다. 그리고 입력되는 라인 수가 정해져 있지 않으므로 이에 대해서도 잘 정리해볼 수 있는 문제였다. 항상 string 파싱할 때 substr가 유용하므로 사용법을 익혀둘 필요가 있다. #include #include #include using namespace std; int a,b,c; vector parsed_nums(string str) {..
2022.12.08 -
[LeetCode] 262. Trips and Users
Hard 문제라 그런지 푸는 데 한참 더 걸렸다..ㅠ 그리고 예상치 못한 변수들이 자주 등장했다. Common Table Expressions(CTE)를 만들어서 banned되지 않은 user만 추출해놓는다. 이를 이용해 client_id, driver_id가 banned되지 않은 유저에 해당하는 row만 추출하려고 했다. 그런데 동일한 CTE를 이용하면 안되고 각각 다른 유저 테이블로 속함 여부를 판단해야한다. 안그러면 제대로 작동하지 않는다. (아무래도 하나의 테이블에서 하나의 row를 내부적으로 가리켜야하는 거 같다.) 그리고 날짜 구간을 위해 리트코드에서는 처음으로 BETWEEN을 써주어서 풀 수 있었다. WITH NOT_BANNED_USERS AS ( SELECT users_id FROM Use..
2022.12.08 -
[LeetCode] 550. Game Play Analysis IV
이번 문제도 튜플을 생성해서 풀면 간단한 문제이다. 그런데 GROUP BY를 안 쓰고 그냥 MIN으로 구했더니 리트코드가 터져버리더라...;; 다시 한 번 SQL 쿼리에도 효율성이 큰 문제임을 깨달으면서 이번 문제를 풀어나갔다. 크게 Activity 테이블을 3번 쓴다. 한 번은 데이터를 크게 추출하는 베이스 테이블로, 다른 하나는 플레이어별 최초 접속 일자 추출용, 나머지 하나는 전체 플레이어 수를 추출하는 데 사용된다. 복잡해보여도 하나하나 블록 쌓듯이 쿼리를 조합해나가면 어렵지 않게 풀 수 있다. 그리고 여기서 이전 날을 구할 때 DATE_SUB 함수를 INTERVAL과 함께 쓰는 것을 기억해두자. SELECT ROUND( COUNT(A1.player_id) / (SELECT COUNT(DISTIN..
2022.12.07 -
[선형대수] 벡터의 크기와 거리
벡터의 크기(norm) 벡터의 시작점과 끝점 거리를 벡터의 크기라고 한다. 즉, 벡터의 크기 = 벡터의 길이 = 벡터의 norm = |v| = ||v|| ord = 1: L1을 사용하며, 컴퓨터비전에서 주로 쓴다. x = [1, 2, 3]일 때 ||x|| = 1 + 2 + 3 ord = 2: L2를 사용하며, K-means clustering과 K-nearest neighbor 알고리즘에서 주로 쓴다. x = [1, 2, 3]일 때 ||x|| = sqrt(1 + 2 + 3) 벡터의 거리/유사도 벡터의 거리(distance)는 두 벡터 간 거리를 의미한다. 예를 들어 개체 간 에 비슷한 정도를 나타낼 때는 벡터의 거리를 사용한다. 그렇다면 거리는 왜 중요할까? 거리는 일종의 유사도 개념이기 때문이다. 거리..
2022.12.04 -
[선형대수] 직교 벡터
두 벡터 사이의 각도가 90도를 이루는 것을 직교 벡터(orthogonal vector)라고 한다. SVM은 다음과 같이 주어진 데이터가 어떤 범주에 속할지 판별하는 분류 모델로, 패턴 인식이나 자료 분석에 주로 사용한다. SVM 원리는 마진(margin)을 최대로 하는 결정 경계를 찾는 것이다. 그렇다면 결정 경계는 어떻게 찾을까? 이 때 사용하는 것이 바로 벡터의 직교와 내적이다.
2022.12.04