📜 문제 문제 링크 💡 나의 풀이 reportMap 초기화 유저ID로 해당 유저의 신고 정보(유저가 신고 당한 횟수와 신고한 유저ID 리스트)에 O(1)만에 접근할 수 있도록, 유저ID를 key로 가지고 유저의 신고 정보(Report 클래스)를 value로 가지
📜 문제 문제 링크 💡 나의 풀이 노래 수록 기준 1. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 를 구현할 때 장르 별 재생 수를 O(1)만에 구할 수 있도록 genresPlaysCountMap을 두었고, 남은 두 기준 2.장르 내에서 많이 재생된 노래를
문제 링크프린터 대기 목록에서 첫번째 원소를 꺼내거나 새로운 원소를 추가하기 쉽게 LinkedList로 대기 목록(queue)을 구현했고,대기 목록에 있는 문서들 중에 가장 높은 중요도가 무엇인지 빠르게 알 수 있게 PriorityQueue(priorityQueue)에
문제 링크대기중인 트럭은 따로 queue를 두지 않고currentTruckIndex로 현재 다리를 건널 차례인 truck을 가리키게 했다.다리를 queue로 만들어서 트럭이 다리를 건너는 걸 표현했다.1\. 현재 차례의 트럭이 다리를 건널 수 있으면 다리에 트럭 올리기
문제 링크 작업의 요청부터 종료까지 걸린 시간의 합을 최소로 하려면, 작업의 소요시간은 변하지 않는 값이기 때문에 작업들의 대기시간을 줄여야한다. 작업들의 대기시간을 줄이려면, 현재 시점에서 대기중인 작업들 중에 가장 소요시간이 짧은 작업을 선택해야한다. 왜냐하
문제 링크 총 2가지 풀이 방법으로 문제를 풀어보았다. 첫번째는 우선순위큐를 사용하지 않고 ArrayDeque를 오름차순으로 정렬해서 index가 0인 element를 최솟값, lastIndex에 있는 element를 최댓값으로 사용하는 방식으로 문제를 풀었다
문제 링크 완전 탐색으로 풀게 되면 던전의 개수를 N이라고 할 때, 던전을 방문하는 순서의 모든 경우의 수 N!만큼 계산을 해야한다. -> O(N!) 그런데 문제에서 가능한 던전의 최대 개수는 8개이기 때문에 아무리 느려도 O(8!)만큼의 시간복잡도밖에 나오지
문제 링크input으로 주어진 wires를 순회하면서 인접리스트로 트리를 구성한다.wires를 순회하면서 해당 wire를 제거했을 때 나뉜 두 전력망이 가지고 있는 송전탑의 개수 차이를 구하고, answer보다 작으면 answer를 갱신한다. \-> 이때 전력망이 가
문제 링크문자열 S에 있는 모든 문자들을 순회하면서 (i-1)번째 문자가 'I'인 경우에만 index(i ~ i+2n)의 substring이 Pn을 만족하는지 확인했다.여기서 나의 실수는 substring과 Pn을 비교하는 과정에서, Pn의 문자열의 길이가 M이라는 가
📜 문제 문제 링크 💡 풀이 다이나믹 프로그래밍으로, 부분 결과를 이차원 배열 lcs에 저장했다. 입력받은 두 문자열 중 먼저 입력받은 것을 S1, 두번째로 입력받은 것을 S2라고 했을 때 lcsi를 S1를 i번째 문자까지 읽은 부분 문자열과 S2를 j번째 문자
문제 링크다이나믹 프로그래밍으로 문제를 풀었다.입력으로 받은 숫자들을 배열 input에 담고, 2차원 dp table을 만들었다.1\. dp table 설정dp\[i]\[0] : inputi을 포함하지 않았을 때, input의 인덱스 0부터 i까지만 봤을 때 연속합의
문제 링크모든 사탕들에 대해 인접한 칸과 교환해보는 Brute Force 방식으로 문제를 풀었다.이렇게 문제를 풀면 O(N^2 4 2N) = O(N^3)의 시간복잡도지만, n의 최댓값이 50이기 때문에 이 방식으로 문제를 해결할 수 있었다.모든 사탕들을 순회한다.
📌 N까지 자연수 중 소수 찾기
우선순위가 부여된 여러가지 데이터들 중에서 우선순위가 가장 높은 값을 간단하고 효율적이게 얻고 싶을 때 java.util 패키지에서 제공하는 PriorityQueue를 자주 사용한다. int와 String같이 자바에서 제공하는 자료형같은 경우에는 특별한 경우가 아
문제 링크Stack을 사용해서 문제를 풀었다.numbers를 순회할 때, 현재 처리하려는 것은 “이 수(number)를 뒷큰수로 가지는 숫자 구하기” 이다.stack에는 이전의 인덱스 중에 아직 뒷 큰수를 찾지 못한 인덱스들이 인덱스가 큰 순으로 담겨있다. 그리고, 아
문제 링크가능한 (i, j, k)의 모든 순서쌍을 조합을 사용해서 구한다.1에서 구한 순서쌍으로 ai < aj, ai > ak인 경우 순서대로 출발할 수 없으므로, answer를 1 증가시킨다.이 문제에서 입력값 범위가 3 이상 5000 이하인데,ijk 순서쌍을
문제 링크2차원 배열을 1차원 배열로 나누어서, 1차원 배열의 누적합을 이용한 풀이이다.예를 들어, 문제에서 주어진 board의 크기는 4 \* 5이고, 현재 skill이 1, 0, 1, 2, 3, 5라고 하자.이때 board에 있는 건물들의 내구도 변화량을 그림으로
📜 문제 문제 링크 💡 2차원 풀이 dynamic programming으로 풀었고, dp table을 dpi을 세로 기준 1번째 칸부터 i번째 칸까지 고려했을 때* i번째 칸에 사자가 0마리인 경우*, dpi을 세로 기준 1번째 칸부터 i번째 칸까지 고려했을 때