Closed KodaHye closed 3 weeks ago
recommend
요청 시마다 sorting을 해야 함가장 어려운 문제리스트
와 가장 쉬운 문제리스트
를 관리
srr[num] : 문제번호 num에 해당하는 난이도
srr[num] = -1
srr[num] = level
처음에는 정렬로 리스트 하나만 생성해서 첫번째와 마지막을 이용하려 했지만,,, 시간초과가 발생했습니다...우선순위큐를 활용하는 방법을 더 공부해야겠어요,,,
1 <= 문제의 개수 <= 100_000
1 <= 명령의 개수 <= 10_000
log_2(100_000) = 1660964.xx
이므로 문제가 10_000
개 이상일 때, 계속하여 문제에 대해 정렬할 시 시간 초과가 발생할 수 있음
100_000 × log_2(100_000) × 10_000
TreeMap
사용
TreeMap.put()
시간복잡도: O(logN)
Node
클래스
int num
: 번호, int level
: 난이도 TreeMap<Node, Integer> mapToIdx
TreeMap
의 key
를 Node
로 설정하여 우선순위대로 정렬될 수 있도록 함value
는 문제 번호 값 TreeMap<Integer, Node> idxToNode
TreeMap
이 아닌 일반적인 HashMap
을 사용해도 가능recommend(StringTokenizer st)
x == 1
: mapToIdx.lastKey().num
출력x == -1
: mapToIdx.firstKey().num
출력add(StringTokenizer st)
idxToMap
과 mapToIdx
에 새로운 객체 넣어주기solve(StringTokenizer st)
idxToMap
과 mapToIdx
에 입력된 객체 삭제해주기시간복잡도를 고려하고, 안된다! 싶으면 다른 방법으로 접근하는 태도를 길러야될 것 같습니다!!
O(logN)
)가능큰 값, 작은 값 나눠서 관리 → 우선순위큐 2개 사용(순서, 역순)
처음엔 (같은 번호, 다른 레벨)이 같이 공존하는 줄 알고 해시코드를 사용해야하나 고민했었으나, 같은 번호는 중복되어 주어지지 않기에 사용하지 않음
Setcheck
: 풀어야할 문제들 관리, 문제 번호
만으로 관리
Map<Integer, Problem> notes
: 문제번호, 문제 관리, 문제 객체를 다루기 위해 사용
객체로 이뤄진 값을 하나의 필드값만으로 제어하는 연습을 더 해야하겠다! 다른 분들 코드보다 배로 느려서.. 한번 다른 분들 코드 탐구해보겠습니다!
Heap
트리 맵
을 이용해서 문제 넘버와 난이도를 정렬해서 저장해시 맵
을 이용해서 문제의 넘버와 난이도를 저장해서 풀었는지 안 풀었는 지를 확인recommend
: 조건에 맞게 문제를 출력add
: 각 맵에 문제 입력solved
: 해시 맵에서 해당 문제의 난이도를 가져와서 트리맵에서 지워 줌
객체 다루기 복잡하네요...
TreeMap
, TreeSet
1<=문제수<=100000
1<=명령문<=10000
O(n*m)
완전탐색으로 풀이할 경우 10^9 으로 풀이가능TreeMap<Integer,TreeSet<Integer>>
recommend
add
solved
계속 시간초과가 났는데, 원인이
BufferedReader
로 매개변수를 가공할 때 형변환이 많거나 문자열 가공(split)이 많이 발생해서 였네요..BufferedReader
보다Scanner
같이 형변환 없이 바로 매개변수를 사용하는게 더 효율적인걸 알았어요!
O(log N)
TreeSet
: 난이도, 문제 번호를 저장
TreeSet
만 사용했을 때 시간 초과 발생하였음!HashMap
: 문제 번호로 난이도를 빠르게 조회하여 성능 향상
solved
문제 삭제 시 O(1) 시간 복잡도로 문제 난이도 빠르게 조회
우선순위 큐를 떠올린 문제였는데, TreeSet을 사용 해본적이 없어서 TreeSet으로 풀어봤습니다 객체 선언 연습하기..!