반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 배열 돌리기 5
- 백준
- 설명
- 티스토리챌린지
- 카카오
- 등산코스 정하기
- java
- 핵심
- SQL
- MySQL
- 산 모양 타일링
- 수료
- 프로그래머스
- softeer
- 퍼즐 조각 채우기
- PCCP
- 오블완
- 후기
- 24955
- 142085
- 정기 코딩 인증평가
- SSAFY
- 인턴십
- 카카오코드 본선
- 해결
- 14942
- 소프티어
- 숫자 이어 붙이기
- 10기
- 싸피
Archives
- Today
- Total
개발 쥬스
[프로그래머스/Java] 142085 디펜스 게임 본문
반응형
🔗 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/142085
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔍 해결 과정
무적권을 사용하는 기준을 생각하는 과정에서 시간이 걸렸던 문제입니다. 조합을 활용하여 무적권을 일일이 선택하여 계산하기에는 enemy의 길이가 최대 100만이므로 유효 시간 안에 연산을 완료할 수가 없습니다.
그래서 강구한 다른 방법은 우선순위 큐를 활용하여 현재까지 나온 적의 수 중 가장 많은 적이 나타난 것에 무적권을 부여하는 것입니다.
자세한 설명은 코드에 주석을 통해 첨부하였습니다.
- 시간복잡도: O(mlogm), m: enemy 배열의 길이
- 우선순위 큐 자료구조의 시간 복잡도: O(logm)
✏️ 코드
import java.util.*;
class Solution {
public int solution(int n, int k, int[] enemy) {
int answer = 0;
// 적이 많은 순으로 우선순위 큐를 처리
Queue<Integer> pq = new PriorityQueue<>((o1, o2) -> o2 - o1);
for (int e : enemy) {
pq.offer(e); // 적의 수를 큐에 넣어두기
n -= e;
// n이 음수라면 무적권 사용하기
if (n < 0) {
int roundCount = 0;
while (n < 0 && k > 0) {
n += pq.poll();
--k; // 무적권 사용
++roundCount;
}
// 이랬는데도 n이 여전히 음수라면 게임이 종료
if (n < 0) {
break;
}
// 그런게 아니라면 무적권 사용한 만큼 라운드 계산하기
answer += roundCount;
continue;
}
// n이 양수이면 라운드 진행이 가능함.
++answer;
}
return answer;
}
}
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스/sql] 131534 상품을 구매한 회원 비율 구하기 (0) | 2024.10.23 |
---|---|
[프로그래머스/Java] 87390 n^2배열 자르기 (0) | 2024.10.23 |
[프로그래머스/Java] 179963 추억 점수 (1) | 2024.10.23 |
[프로그래머스/Java] 148653 마법의 엘리베이터 (0) | 2024.10.08 |
[핵심정리] 크루스칼 알고리즘 (0) | 2024.10.02 |