개요 대규모 데이터셋에서 원하는 정보를 효율적으로 저장하고 검색하는 것은 시스템 성능에 매우 중요하다.가령, 웹사이트에 사용자가 로그인했을 때 서버는 해당 사용자의 로그인 상태나 장바구니 정보 같은 걸 기억해야 한다고 가정해보자.사용자가 페이지를 이동할 때마다 이 정보를 빠르게 찾아야 하는데,배열이나 연결 리스트를 이용한 순차 탐색은 데이터 크기에 비례하여 탐색 시간(O(n))이 증가하며, 이진 탐색 트리(O(log n))도 한계가 있다.만약 로그인 시 발급된 고유한 세션ID(Key)에 해당하는 사용자의 정보(사용자 객체, 장바구니 정보 등)를 값(Value)로 저장한다면, 사용자의 요청에 세션ID로 바로 조회해서 사용자 정보를 순식간에 꺼내 쓸 수 있을 것이다.이를 통해 데이터 양과 관계없이 거의 일정..
개발자를 하기로 마음먹고 SSAFY 지원 신청한 게 엊그제 같은데벌써 1학기를 마무리하고, 2학기를 진행하고 있다. 시간이 참 빠른 건 나뿐인가.. 그래도 성적 우수상도 받고 참열심히 공부했다는 생각이 들기도 한다. 개발이 아예 처음은 아니고, 그전에 알고리즘도 열심히 풀었었지만싸피에서 1학기를 보내면서 많은 걸 배우고 느낀 것 같다. 처음 싸피 들어왔을 때 (백준 티어)골드 3이었던 것 같은데 플래티넘 2까지 찍기도 하고무엇보다 같이 개발자가 되기 위해 열심히 공부하는 동료들과함께 개발에 대해 이야기 나누고 프로젝트도 진행해 보는 게가장 가치 있는 경험이었다고 생각한다. 그리고 또 좋았던 점은 기프티콘을 참 많이 준다.!!!!(10개 정도 받은 듯) 2학기 때는 B형도 꼭 따고 취업 준비도 열심히 하..

알고리즘 분류: 세그먼트 트리, 자료구조문제 링크: https://www.acmicpc.net/problem/7578 어떻게 풀어야 할까.. 막막하지만역전(inversion) 이라는 개념을 알고 있으면 정말 쉬워진다.역전(inversion)은 배열에서 앞에 있는 값이 뒤에 있는 값보다 큰 경우를 말하기도 하고,원본 배열과 비교 배열에서 원본 배열의 요소가 비교 배열의 요소에서 얼마나 뒤로 떨어져 있는지를 의미하기도 한다. 풀이는 굉장히 간단한데, 그냥 inversion된 애들이 얼마나 inversion 되었는지 세어주면 된다. 어차피 모든 요소들이 매칭이 되어야하므로어떤 요소가 inversion 되지 않았다면(뒤에 위치하고 있다면)?어떤 요소는 반드시 inversion 되어 있는 상태가 된다. 위..
알고리즘 분류: 구현, 시뮬레이션문제 링크: https://www.acmicpc.net/problem/21609 구현이 은근히 쉽지 않았던 문제. 일단 문제는 그냥 주어진 로직을 순서대로 구현하면 된다.필요 로직은 다음과 같다. 1. 그룹핑2. 그룹 중 가장 블록 개수가 많은 그룹 없애기(-2 로 설정했음) 3. 이때 그룹들의 블록 개수가 모두 2 미만이라면 종료4. 블록 개수의 제곱만큼 점수를 더한다.5. 블록 내리기6. 왼쪽으로 90도 회전7. 블록 내리기8. 1번으로 다시 돌아간다. 이때 주의할 점은그룹핑 할 때는 무지개 블록을 기준으로는 하면 안된다는 점,기준 블록은 무조건 그룹핑을 시작한 블록 기준이라는 점(그래서 그냥 배열을 순서대로 순회하면 된다)그룹핑 하고 나서는 무지개 블록은 방문 처리..

알고리즘 분류 : DPhttps://www.acmicpc.net/problem/15989 정수 n을 1, 2, 3의 합으로 표현하는 방법의 수를 구하는 문제이다.각각의 경우에서 숫자는 1, 2, 3을 한 번에 하나씩만 더해 나가며 만들 수 있다.여기서 주의할 점은 순서만 다르고 합을 이루고 있는 요소가 같은 경우는 카운트에서 제외해야한다. 일단 n=1, 2, 3일 때를 살펴보자. n=1 일 때,1=1경우의 수는 1가지이다. n=2일 때2=1+12=2경우의 수는 2가지이다. n=3일 때,3=1+1+13=1+23=3경우의 수는 3가지이다. 얼핏 보면, n=3일 때를 보면 n=2일 때에서 +1을 붙인 경우, n=1일 때에서 +2을 붙인 경우, n=0일 때에서 +3을 붙인 경우가 보이는 것을 알 수 있다...

선분 교차 판정은 CCW를 활용하여 두 선분이 교차하는지를 판단하는 테크닉이다. https://baehoon.tistory.com/96 CCW를 간단히 설명하면, 세 점 A, B, C가 주어지면 벡터와 외적을 이용해 A -> B -> C로 가는 방향이 일직선인지 반시계 방향인지 시계 방향인지 세 가지 경우의 수로 나누는 알고리즘이다. CCW의 반환값은 다음과 같이 도출될 수 있었다. $$ CCW=(x2-x1)(y3-y1)-(y2-y1)(x3-x1) $$\( CCW 세 점의 진행 방향이 시계 방향이다. \( CCW>0 \) => 세 점의 진행 방향이 시계 방향이다. \( CCW=0 \) => 세 점의 진행 방향이 시계 방향이다. 코드는 다음과 같다. int ccw..