Leetcode Java Divide Players Into Teams of Equal Skill
업데이트:
문제
코드
class Solution {
public long dividePlayers(int[] skill) {
int[] count = new int[1001];
int sum = 0;
for (int s : skill) {
count[s]++;
sum += s;
}
int teams = skill.length / 2;
if (sum % teams != 0) {
return -1;
} else {
long result = 0;
int divide = sum / teams;
for (int s : skill) {
int diff = divide - s;
if (count[diff] == 0) {
return -1;
}
result += (long) s * diff;
count[diff]--;
}
return result / 2;
}
}
}
결과
설명
- skill을 두 값씩 팀을 지어 동일한 합의 값을 만들 때, 각 팀 값들에 대한 곱을 누계한 값을 반환한다.
- 단, 팀을 이뤄 값을 반환할 수 없으면 -1을 주어진 문제의 결과로 반환한다.
- 문제 풀이에 필요한 변수를 정의한다.
- count는 skill 값의 갯수를 더할 배열로, 값의 범위보다 1 큰 1001 크기의 정수 배열로 초기화하고 갯수를 넣어준다.
- sum은 skill 값의 총합을 넣을 변수로, 각 값의 합을 더해서 넣어준다.
- teams는 skill 값으로 구성할 수 있는 팀의 갯수로, skill 길이를 2로 나눈 값을 넣어준다.
-
sum을 teams로 나눈 값이 0이 아니면 팀을 이룰 수 없으므로, -1을 주어진 문제의 결과로 반환한다.
- 3번의 경우가 아니라면 아래를 수행한다.
- 결과를 구하기 위한 변수를 정의한다.
- result는 팀을 이룰 수 있는 값들에 대한 곱을 누계할 변수로, 반환 타입인 long 형태의 0으로 초기화한다.
- divide는 각 팀이 가능한 값의 합을 저장할 변수로, $\frac{sum}{teams}$로 초기화한다.
- skill을 순차적우로 s에 넣어 아래를 수행한다.
- diff에 $divide - s$의 팀을 이룰 수 있는 값을 넣어준다.
- count[diff]가 0인 팀을 이룰 수 없는 경우, -1을 주어진 문제의 결과로 반환한다.
- result에 s와 diff를 곱한 값을 더한 후 count[diff]의 값을 감소시킨다.
- 반복이 완료되면 각 팀의 값을 두 번 곱해진 result를 2로 나눈 $\frac{result}{2}$를 주어진 문제의 결과로 반환한다.
- 결과를 구하기 위한 변수를 정의한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기