Leetcode Java Friends Of Appropriate Ages
업데이트:
문제
코드
class Solution {
public int numFriendRequests(int[] ages) {
int[] dp = new int[121];
for (int age : ages) {
dp[age]++;
}
for (int idx = 1; idx <= 120; idx++) {
dp[idx] += dp[idx - 1];
}
int result = 0;
for (int i = 120, j = 120; i >= 1; i--) {
while (j > ((0.5 * i) + 7)) {
j--;
}
if (++j <= i) {
result += (dp[i] - dp[i - 1]) * (dp[i] - dp[j - 1] - 1);
}
}
return result;
}
}
결과
설명
- 동일하지 않은 x와 y에 대해서 아래의 조건을 모두 만족하지 않는 경우 친구 요청을 수행할 수 있는데, ages를 이용하여 해당 요청의 수를 구하는 문제이다.
- $ages[y] <= \frac{ages[x]}{2} + 7$
- $ages[y] > ages[x]$
- $ages[y] > 100$ && $ages[x] < 100$
- 문제 풀이에 필요한 변수를 정의한다.
- dp는 친구 요청의 수를 계산하기 위한 배열로, 최대 나이인 120보다 큰 121의 크기로 초기화하고 아래를 수행한다.
- dp 내 ages의 각 나이 값에 해당하는 위치 값을 증가시켜준다.
- 1부터 120 이하까지 idx를 증가시키며 dp의 이전 값을 현재 위치의 값에 더해준다.
- result는 친구 요청의 수를 저장하기 위한 변수로, 0으로 초기화한다.
- dp는 친구 요청의 수를 계산하기 위한 배열로, 최대 나이인 120보다 큰 121의 크기로 초기화하고 아래를 수행한다.
- i와 j를 120부터 i가 1 이상일 때 까지 감소시키며 아래를 반복한다.
- j가 첫 번째 기본 조건인 $j <= \frac{i}{2} + 7$를 만족할 때 까지 j를 감소시켜준다.
- j를 증가시킨 후 해당 값이 i보다 큰 경우, result에 아래 두 수의 곱인 경우의 수를 더해준다.
- dp의 i번째 값에서 $i - 1$번째 값의 차잇값인 해당 위치에 해당하는 친구들의 숫자.
- dp의 i번째 값에서 $j - 1$번째 값과 1을 뺀 값을 곱한 친구 요청을 수행할 수 있는 친구들의 숫자.
- 3번의 반복이 완료되면 친구 요청의 수가 저장된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기