
내가 작성한 코드
import java.util.Arrays;
class Solution {
public long solution(int[] weights) {
long answer = 0; // 카운트
Arrays.sort(weights); // 오름차순 정렬
for (int i = 0; i < weights.length - 1; i++) {
for (int j = i + 1; j < weights.length; j++) {
// 현재 무게와 다음 무게 거리별 계산후 같으면 카운트 증가
if (weights[i] * 2 < weights[j])
break;
if (weights[i] == weights[j]) {
answer++;
continue;
}
if (weights[i] * 3 == weights[j] * 2) {
answer++;
continue;
}
if (weights[i] * 4 == weights[j] * 2) {
answer++;
continue;
}
if (weights[i] * 4 == weights[j] * 3) {
answer++;
continue;
}
}
}
return answer;
}
}
다른 사람의 코드
import java.util.*;
class Solution {
public long solution(int[] weights) {
long answer = 0;
Map<Double, Integer> map = new HashMap<>(); // 무게, 등장 횟수
Arrays.sort(weights); // 무게를 오름차순으로 정렬 >> 다음 무게는 현재무게보다 크거나 같음
for (int weight : weights) {
// 1, 2/3, 2/4, 3/4 >> 각 무게별 비율에 해당하는 무게를 계산
double originW = weight * 1.0;
double tempW1 = (weight * 2.0) / 3.0;
double tempW2 = (weight * 1.0) / 2.0;
double tempW3 = (weight * 3.0) / 4.0;
// 해당 무게가 등장한 횟수를 더함
if (map.containsKey(originW))
answer += map.get(originW);
if (map.containsKey(tempW1))
answer += map.get(tempW1);
if (map.containsKey(tempW2))
answer += map.get(tempW2);
if (map.containsKey(tempW3))
answer += map.get(tempW3);
map.put((originW), map.getOrDefault((originW), 0) + 1); // 현재 무게를 맵에 추가
}
return answer;
}
}
Share article