Notice
250x250
Recent Posts
Recent Comments
Link
넘치게 채우기
[LeetCode] 2554. Maximum Number of Integers to Choose From a Range I 본문
PS/LeetCode
[LeetCode] 2554. Maximum Number of Integers to Choose From a Range I
riveroverflow 2024. 12. 6. 10:13728x90
반응형
https://leetcode.com/problems/maximum-number-of-integers-to-choose-from-a-range-i/description/
leetcode - Maximum Number of Intergers to Choose From a Range I
문제 유형: 그리디
문제 난이도: Medium
문제
You are given an integer array banned and two integers n and maxSum. You are choosing some number of integers following the below rules:
- The chosen integers have to be in the range [1, n].
- Each integer can be chosen at most once.
- The chosen integers should not be in the array banned.
- The sum of the chosen integers should not exceed maxSum.
Return the maximum number of integers you can choose following the mentioned rules.
정수 배열 banned와 두 개의 정수 n과 maxSum이 있다.
아래의 룰을 따라서 정수를 골라야 한다.
- 1~n사이에서 고른다.
- 각 숫자당 최대 한 번만 고른다.
- banned에 있으면 안된다.
- 합이 maxSum을 넘으면 안된다.
룰에 따라서 고른 정수들의 최대 개수를 구하시오.
풀이
banned조회를 빠르게 하기 위해, available 배열을 만들어서 false로 채운다. 0도 false로 한다.
나머지는 true로 해놓는다.
배열은 0~n까지 인덱스를 가지는 n+1크기로 한다.
또는 해시 테이블을 이용할 수도 있다.
1부터 n까지 다음을 한다:
만약 available[i]가 true이고, sum + i가 maxSum을 넘지 않는다면, sum에 i를 더하고, 개수를 1 누적한다.
최종 개수를 반환한다.
코드
C++
class Solution {
public:
int maxCount(vector<int>& banned, int n, int maxSum) {
vector<bool> available(n+1, true);
available[0] = false;
for(int i = 0; i < banned.size(); ++i) {
if(banned[i] > n) continue;
available[banned[i]] = false;
}
int sum = 0;
int ans = 0;
for(int i = 1; i <= n; ++i) {
if(available[i] && sum + i <= maxSum) {
sum += i;
ans++;
}
}
return ans;
}
};
728x90
반응형
'PS > LeetCode' 카테고리의 다른 글
[LeetCode] 2054. Two Best Non-Overlapping Events (0) | 2024.12.08 |
---|---|
[LeetCode] 1760. Minimum Limit of Balls in a Bag (0) | 2024.12.07 |
[LeetCode] 2337. Move Pieces to Obtain a String (0) | 2024.12.05 |
[LeetCode] 2825. Make String a Subsequence Using Cyclic Increments (0) | 2024.12.04 |
[LeetCode] 2109. Adding Spaces to a String (0) | 2024.12.03 |