본문 바로가기

2024/05

(22)
99클럽 코테 스터디 6일차 TIL: [프로그래머스] 이중우선순위큐 https://school.programmers.co.kr/learn/courses/30/lessons/42628# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀이 1처음에 푼 풀이는 다음과 같다.최댓값과 최솟값을 구해야 하므로 큰 수를 우선으로 하는 우선순위 큐, 작은 수를 우선으로 하는 우선순위 큐 총 2개를 사용하면 된다.그런데 하나의 큐에서 제거된 값이 여전히 다른 큐에는 남아있으므로, 두 큐에 공통되게 담긴 수를 의미하는 set을 두었다. 그러고 하나의 큐에서 값을 제거할 때 정말 실제로 큐에 남아있는 값인지(두 큐에 공통되게 있는지) set.co..
프로젝트에서 레디스를 사용하며 한 고민들 RDB 레디스는 인메모리 기반의 데이터베이스이다. 따라서 서버가 꺼지면 데이터는 모두 휘발된다. 만약 레디스의 데이터를 영구 저장하고 싶으면 레디스가 제공하는 AOF와 RDB 기능을 사용하면 된다. 두 기능에 대한 설명은 https://olsohee.tistory.com/115 이 글에 나와있다. 간략히 두 방식을 비교하면 데이터 손실이 없어야 하면 AOF를, 어느정도의 데이터 손실이 발생해도 괜찮으면 RDB를 사용하면 될 것 같다. 나의 경우, 레디스에 있는 인기글과 사용자 정보를 백업해야 하는 상황인데, 이는 어느정도의 데이터 손실이 발생해도 괜찮기 때문에 그 대신 적은 데이터 크기와 빠른 복구의 이점을 얻을 수 있는 RDB를 사용했다. RDB를 사용하면 일정 시간마다 스냅샷을 찍어 데이터 백업이 진..
99클럽 코테 스터디 5일차 TIL: [프로그래머스] 디스크 컨트롤러 https://school.programmers.co.kr/learn/courses/30/lessons/42627 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr현재 시간까지 들어온 job들을 찾는 과정에서는 job들 중에 요청 시간이 적은 순으로 빼내야 한다.이어서 현재 시간까지 들어온 job들 중 소요 시간이 가장 적은 job을 찾아야 하므로 이때는 job들 중에 소요 시간이 적은 순으로 빼내야 한다.따라서 요청 시간이 기준인 우선순위 큐와 소요 시간이 기준은 우선순위 큐로 총 2개의 큐를 사용하면 된다.주의할 점으로는, 큐를 사용할 때 항상 큐가 비어있는..
99클럽 코테 스터디 4일차 TIL: [프로그래머스] 주식가격 스택을 이용해서 푸는 문제이다. 쉬웠는데 딱 한가지 실수는 while 문에서 !stack.isEmpty() 를 넣어주지 않아서 런타임 에러가 발생했다. while문을 돌면서 스택에 값이 모두 빠져 비어있는 경우에도 while문을 돌 수 있기 때문에 !stack.isEmpty() 를 잊지말고 꼭 넣어주자!import java.util.*;class Solution { public int[] solution(int[] prices) { Stack stack = new Stack(); int[] answer = new int[prices.length]; for (int i = 0; i prices[i]) { i..
[백준] 12865. 평범한 배낭 https://www.acmicpc.net/problem/12865 이차원 배열을 사용한 dp로 풀 수 있는 문제이다. dp[i][j]는 i번째 아이템까지 고려했을 때, 무게 j를 채우는 최대 가치를 의미한다.  만약 3번 아이템을 고려할 차례라고 할 때, dp[3][7]은 3번 아이템을 포함하지 않았을 때 무게 7을 채우는 최대 가치(= dp[2][7])와 3번 아이템을 포함했을 때 무게 7을 채우는 최대 가치(= 3번 아이템의 가치 + dp[2][7 - 3번 아이템의 무게]) 중 더 큰 값이 된다.  즉, 다음과 같은 점화식이 나온다.dp[i][j] = max(dp[i - 1][j], value[i] + dp[i - 1][j - weight[i]])import java.io.BufferedReader..
99클럽 코테 스터디 3일차 TIL: [프로그래머스] 다리를 지나는 트럭 https://school.programmers.co.kr/learn/courses/30/lessons/42583 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제를 딱 보고 큐를 떠올리긴 했지만 효율적인 구현을 떠올리지 못했다. 다리에 올라간 트럭은 다리 길이만큼 다리에 머무르게 되는데, 이를 어떻게 구현하는게 효율적일지 고민하다가 혼자 힘으로 풀지 못했다. 주요 포인트는 다음과 같다.처음에 다리 길이만큼 0을 넣는다.그리고 다리에 트럭을 올릴 수 있으면(무게가 가능하면) 올린다. 반면 올릴 수 없으면 트럭대신 0을 올린다.즉, 큐에는 0이든 트럭이든 다리..
99클럽 코테 스터디 2일차 TIL: [백준] 2179. 비슷한 단어 https://www.acmicpc.net/problem/2179 반복문을 통해 단순히 구현하면 되는 문제이다. 단순한 문제 같지만 헤맸다. substring()을 통해 두 문자열을 비교하면 메모리 초과가 난다. 따라서 charAt으로 각 자리를 비교하면 된다. 그리고 비교 결과 다르면 반복문을 빠져나오면 된다.접두사 길이가 가장 긴 두 개 이상의 문자열을 set이나 list에 저장하려고 했으나, 굳이 할 필요 없다. 어차피 문자열들 중 가장 먼저 입력된 문자열 2개를 출력해야 하는데, sameCount와 sameCountMax가 같은 경우에 값을 갱신하지 않고 sameCount > sameCountMax인 경우에만 값을 갱신하면 자연스럽게 가장 먼저 입력된 문자열 2개만 출력할 수 있다.import j..
반정규화를 통한 성능 향상 개요이 글은 프로젝트에서 진행했던 게시글 페이징 조회시 성능 향상 과정에 대한 글이다.문제 상황게시글 페이징 조회 시 게시글 데이터 뿐만 아니라 게시글의 좋아요, 댓글, 북마크 수까지 함께 반환해야 한다. 따라서 게시글과 연관된 좋아요, 댓글, 북마크 엔티티까지 함께 조회하면서 N+1 문제가 발생했다.  10만 건의 데이터 중 좋아요 수가 많은 100 건을 페이징 조회하는 테스트를 진행했다. 테스트 결과는 다음과 같다.6.7 TPSN+1 문제 발생좋아요 순 조회 시 게시글 테이블을 풀스캔해결 과정1. 페치 조인가장 대표적인 N+1 문제 해결 방안으로 페치 조인이 있다. 그러나 컬렉션 페치 조인은 주의할 점이 있다. 바로 페이징 처리가 offset, limit 등의 키워드를 통해 DB에서 이뤄지지 않고, ..