
🎯 출석, 뱃지, 챌린지… 단순한 기능이 구조를 망치기 시작했다 우리가 만들고 있던 건 악기 연습을 꾸준히 이어가도록 도와주는 SNS 플랫폼이었다.사용자는 하루에 한 번 연습 영상을 업로드하고, 친구들의 피드백을 받으며, 연습 습관을 만들어가는 구조였다.나에게 구현 임무가 주어진 기능에 대한 기획은 다음과 같이 단순했다.출석하면 경험치를 주고챌린지를 성공하면 레벨업하고특정 조건 달성 시 뱃지를 부여하고그에 따른 후속 처리를 해야 했다 (예: 경험치/보상 처리 등)처음엔 “이게 뭐가 어려워?” 싶었다. 그냥 조건 체크하고 if로 때려박으면 끝 아닌가? 하지만 그렇게 생각했던 순간이 구조가 무너지기 시작한 첫 단추였다. 💥 조건 지옥, 로직 중복, 유지보수 지옥 챌린지 성공, 출석 완료, 뱃지 획득,..
개요 대규모 데이터셋에서 원하는 정보를 효율적으로 저장하고 검색하는 것은 시스템 성능에 매우 중요하다.가령, 웹사이트에 사용자가 로그인했을 때 서버는 해당 사용자의 로그인 상태나 장바구니 정보 같은 걸 기억해야 한다고 가정해보자.사용자가 페이지를 이동할 때마다 이 정보를 빠르게 찾아야 하는데,배열이나 연결 리스트를 이용한 순차 탐색은 데이터 크기에 비례하여 탐색 시간(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을 붙인 경우가 보이는 것을 알 수 있다...