[백준] 그리디(Tree, PQ) 코멘트 모음

2024. 11. 9. 22:40·알고리즘 메모

📝 Greedy(Tree, PQ)

⭕️ 1135번 : 뉴스 전하기 (골드2)

  • 문제 유형 : greedy, sort, dp, tree
  • 시간 복잡도 : O(nlogn)
  • 풀이 방식 :
- 트리 정보를 인접리스트를 이용하여 저장
- 재귀를 이용해서 리프 노드부터 자신의 아래 위치에 뉴스가 전해지는 데 가장 오래 걸리는 시간을 구하여 리턴
- 자식 노드(직속 부하 직원)들의 직속 부하 직원 수를 배열에 저장하고 내림차순 정렬한 뒤 한 번에 한 사람에게만 전달 할 수 있기 때문에 배열의 앞에서부터 1씩 늘려가며 소요시간을 더함 (+1, +2, +3, ... , +n) (많은 부하 직원을 가진 부하 직원부터 가장 먼저 전달해야 시간 소요가 최소화)
- 배열을 오름차순 재정렬한 뒤에 가장 앞에 있는 시간(가장 오래 걸리는 시간)을 리턴
- 루트 노드(매니저)까지 진행 후 구해진 시간이 최소 시간

 

 

⭕️ 13975번 : 파일 합치기 3 (골드4)

  • 문제 유형 : greedy, PriorityQueue
  • 시간 복잡도 : O(nlogn)
  • 풀이 방식 :
- 파일 크기를 기준으로 오름차순 정렬하는 우선순위 큐를 사용
- 우선순위 큐에 들어있는 파일 개수가 1개일 경우 파일을 합칠 필요가 없기 때문에 우선순위 큐의 크기가 2개 이상일 때만 앞에 있는 요소 두 개를 꺼내서 합친 후 우선순위 큐에 집어넣는 과정을 반복해서 모든 파일을 합치는 데에 필요한 최소비용을 구함

 

❌ 1374번 : 강의실 (골드5)

  • 문제 유형 : greedy, PriorityQueue, sort
  • 시간 복잡도 : O(nlogn)
  • 풀이 방식 :
- 강의 시작시간 기준으로 오름차순 정렬하는 우선순위 큐, 강의 종료시간 기준으로 오르마순 정렬하는 우선순위 큐를 사용
- 강의 정보들을 입력 받아 첫 번째 우선순위 큐에 집어 넣은 뒤 가장 앞에 있는 강의(시작 시간이 가장 빠른 강의)를 빼내어 두 번째 우선순위 큐에 집어 넣는다
- 이후 첫 번째 우선순위 큐가 빌 때까지 맨 앞에 있는 강의를 빼내어 두 번째 우선순위 큐 맨 앞에 있는 강의의 종료시간과 비교하여 시작시간이 앞서면 무조건 강의실이 하나 더 필요한 것이기 때문에 두 번째 우선순위 큐에 집어넣고, 시작시간이 늦으면 현재 강의실을 이어서 사용하면 되기 때문에 두 번째 우선순위 큐의 맨 앞 강의를 빼내고 현재 강의를 집어 넣음
- 위의 과정 종료 후 두 번째 우선순위 큐의 사이즈(강의 시간이 겹쳐 추가적인 강의실이 필요하여 우선순위 큐에 넣어진 강의들)가 필요한 강의실에 개수

 

⭕️ 1826번 : 강의실 배정 (골드5)

  • 문제 유형 : greedy, PriorityQueue, sort
  • 시간 복잡도 : O(nlogn)
  • 풀이 방식 :
- 1374번 강의실과 동일한 풀이

 

❌ 1202번 : 보석 도둑 (골드2)

  • 문제 유형 : greedy, PriorityQueue, sort
  • 시간 복잡도 : O(nlogn)
  • 풀이 방식 :
- 보석 무게를 기준으로 오름차순 정렬하는 우선순위 큐, 보석 가격을 기준으로 내림차순 정렬하는 우선순위 큐를 사용
- 가방 배열을 오름차순으로 정렬한 뒤, 배열을 순회하며 현재 가방의 용량보다 무게가 적게 나가는 모든 보석들을 우선순위 큐에서 빼내어 두 번째 우선순위 큐에 집어넣음
- 하나의 가방을 체크할 때마다 두 번째 우선순위 큐의 맨 앞의 보석이 현재 가방에 담을 수 있는 가장 비싼 보석이 되기 때문에 하나를 빼서 총 보석값에 더함

 

❌ 13904번 : 제출 (골드3)

  • 문제 유형 : greedy, PriorityQueue
  • 시간 복잡도 : O(nlogn)
  • 풀이 방식 :
- 점수를 많이 얻을 수 있는 과제를 최대한 마감일에 맞춰서 푸는 것이 포인트
- 점수 기준으로 내림차순 정렬하는 우선순위 큐, 과제별 완료 날짜를 체크하는 boolean 배열 check을 사용
- 모든 과제를 입력받아 우선순위 큐에 집어 넣음
- 우선순위 큐에서 과제를 하나씩 빼내어 check배열을 이용해 과제의 마감일부터 시작하여 1일차까지 비어있는 날짜가 있다면 해당 날짜에 과제를 해결 (현재 점수를 많이 얻을 수 있는 과제를 최대한 마감일에 맞춰서 해결하는 과정)
- 이 풀이방법은 케이스가 적은 문제이기 때문에 가능하며 케이스가 많은 경우의 풀이법은 1781번 컵라면 참고

 

⭕️ 1781번 : 컵라면 (골드2)

  • 문제 유형 : greedy, PriorityQueue
  • 시간 복잡도 : O(nlogn)
  • 풀이 방식 :
- 컵라면을 많이 얻을 수 있는 문제를 최대한 데드라인에 맞춰서 푸는 것이 포인트
- 데드라인 기준으로 내림차순 정렬하는 우선순위 큐, 컵라면 수 기준으로 내림차순 정렬하는 우선순위 큐를 사용
- 모든 문제를 첫 번째 우선순위 큐에 집어넣어 정렬
- 최대 시간부터  해당 시간에 할 수 있는 문제들을 첫 번째 우선순위 큐로부터 모두 빼내어 두 번째 우선순위 큐에 집어넣고, 두 번째 우선순위 큐의 맨 앞 문제를 빼내어 얻을 수 있는 컵라면을 총 컵라면 수에 더함(해당 시간에 얻을 수 있는 최고 컵라면 수)
- 위의 과정을 데드라인 1시간까지 반복하여 받을 수 있는 최대 컵라면 수 출력

 

⭕️ 1826번 : 연료 채우기 (골드3)

  • 문제 유형 : greedy, PriorityQueue, sort
  • 시간 복잡도 : O(nlogn)
  • 풀이 방식 :
- 주유소와의 거리를 기준으로 오름차순 정렬하는 우선순위 큐, 연료량 기준으로 내림차순 정렬하는 우선순위 큐를 사용
- 주유소들을 첫 번째 우선순위 큐에 집어넣고, 현재 트럭에 있는 연료로 갈 수 있는 주유소를 우선순위 큐에서 모두 빼내어 두 번째 우선순위 큐에 집어넣음
- 두 번째 우선순위 큐에서 맨 앞의 주유소(현재 들릴 수 있는 주유소중 연료를 가장 많이 가지고 있는 곳)을 빼내어 보유 연료량에 더함
- 위의 과정을 목적지를 지나갈 때까지 반복하며 만약 목적지에 도착하지 못 했는데 진행이 불가능하면 break하고 -1 출력
- 기존 풀이 방식은 현재 갈 수 있는 주유소 중 연료가 가장 많은 주유소로 위치를 이동하면서 다음 위치로 이동을 위해 들러야 할 주유소가 현재 위치의 이전에 있는지 이후에 있는지 경우를 나누어 진행함
- 간결화 된 풀이법은 가지고 출발한 연료와 중간에 들릴 수 있는 주유소의 연료량을 합쳐서 목적지까지 갈 수 있는지만 확인하면 됨 (즉, 기준을 무조건 시작점으로 잡음)

 

'알고리즘 메모' 카테고리의 다른 글

[백준] 그래프 탐색 - BFS (골드1~3) 코멘트 모음  (0) 2024.11.19
[백준] 그래프 탐색 - BFS (골드4~5) 코멘트 모음  (0) 2024.11.18
[백준] 그리디(일반) 코멘트 모음  (2) 2024.11.08
[알고리즘] 2024.09.29 풀이  (0) 2024.09.29
[알고리즘] 2024.09.27 풀이  (0) 2024.09.27
'알고리즘 메모' 카테고리의 다른 글
  • [백준] 그래프 탐색 - BFS (골드1~3) 코멘트 모음
  • [백준] 그래프 탐색 - BFS (골드4~5) 코멘트 모음
  • [백준] 그리디(일반) 코멘트 모음
  • [알고리즘] 2024.09.29 풀이
csb0710
csb0710
  • csb0710
    데모장
    csb0710
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • 스프링부트 메모 (6)
      • 개발 메모 (3)
      • 클라우드 메모 (10)
      • 설치&설정 메모 (2)
      • 알고리즘 메모 (18)
      • 인턴 메모 (7)
      • 데이터베이스 메모 (3)
      • 책 메모 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    서버생성
    그리디
    이지퍼블리싱
    코드트리조별과제
    백준
    submodule
    ELK Stack
    디비설정
    스프링부트
    자동 답변 봇
    알고리즘
    티스토리챌린지
    서버배포
    GitHub
    오블완
    코드트리
    디비설치
    서버 연결
    코딩테스트
    .gitmodules
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
csb0710
[백준] 그리디(Tree, PQ) 코멘트 모음
상단으로

티스토리툴바