import java.util.*;
class Solution {
public int[] solution(int brown, int yellow) {
// 약수 구하기
int[] result = new int[2];
Set<Integer> divisorSet = getDivisorSet(yellow);
// 둘레 구하기
int round = 0;
for (Integer length : divisorSet) {
round = getRound(length, yellow);
if (brown == round) {
result[0] = length + 2;
result[1] = yellow/length + 2;
}
}
return result;
}
private int getRound(Integer length, int yellow) {
return 2*(length + (yellow/length)) + 4;
}
private Set<Integer> getDivisorSet(int num) {
Set<Integer> divisorSet = new HashSet<>();
addDivisorSet(divisorSet, num);
return divisorSet;
}
private void addDivisorSet(Set<Integer> divisorSet, int num) {
for (int i = 1; i <= num/2+1; i++) {
if (num%i == 0) {
divisorSet.add(i);
}
}
}
}
약수를 구한 뒤, 계산 공식에 따라 답변 추출
정확성 테스트
정확성 테스트
테스트 1 〉 통과 (0.06ms, 52.9MB)
테스트 2 〉 통과 (0.05ms, 52.7MB)
테스트 3 〉 통과 (6.43ms, 53.4MB)
테스트 4 〉 통과 (0.12ms, 52.2MB)
테스트 5 〉 통과 (0.22ms, 53.4MB)
테스트 6 〉 통과 (3.11ms, 52.2MB)
테스트 7 〉 통과 (12.10ms, 52.8MB)
테스트 8 〉 통과 (9.72ms, 53MB)
테스트 9 〉 통과 (9.88ms, 52.6MB)
테스트 10 〉 통과 (14.60ms, 54.1MB)
테스트 11 〉 통과 (0.06ms, 52.6MB)
테스트 12 〉 통과 (0.06ms, 52.9MB)
테스트 13 〉 통과 (0.04ms, 52.3MB)
def getDivisorSet(yellow):
divisorSet = set()
for v in range(1, int(yellow/2+2)):
if yellow % v == 0:
divisorSet.add((v, int(yellow/v)))
return divisorSet
def solution(brown, yellow):
# 약수
divisorSet = getDivisorSet(yellow)
# 둘레 구하기
for a, b in divisorSet:
if (2*(a+b)+4) == brown:
result = [a+2, b+2]
result.sort(reverse=True)
return result
정확성 테스트
정확성 테스트
테스트 1 〉 통과 (0.01ms, 10.3MB)
테스트 2 〉 통과 (0.01ms, 10.2MB)
테스트 3 〉 통과 (26.62ms, 10.1MB)
테스트 4 〉 통과 (0.12ms, 10.2MB)
테스트 5 〉 통과 (0.42ms, 10.1MB)
테스트 6 〉 통과 (9.20ms, 10.3MB)
테스트 7 〉 통과 (35.10ms, 10.2MB)
테스트 8 〉 통과 (26.79ms, 10.2MB)
테스트 9 〉 통과 (33.42ms, 10.2MB)
테스트 10 〉 통과 (38.86ms, 10.2MB)
테스트 11 〉 통과 (0.01ms, 10.1MB)
테스트 12 〉 통과 (0.01ms, 10.2MB)
테스트 13 〉 통과 (0.01ms, 10.2MB)