728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/42842?language=java
import java.util.*;
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int total;
total = brown + yellow;
for(int i=3; i<=Math.sqrt(total); i++){
if(total%i==0 && 2*(i+(total/i))-4 == brown){
answer[0]=total/i;
answer[1]=i;
}
}
return answer;
}
}
푼 방법은 일단 갈색이랑 노랑색의 개수를 더하고
두 수를 곱해서 그 수가 나오는지 확인하는 방법으로 접근했다.
갈색이 8이상, 노랑이 1 이상이기 때문에 가로, 세로 길이는 3이상이 된다.
곱은 1*2 = 2*1 처럼 반대로도 되기때문에 시간을 줄이기 위해 for 문은 total의 제곱근까지만 돌린다.
처음에는 통과를 못했는데 그 이유가
2*(i+(total/i))-4 == brown
이 조건을 넣지 않았기 때문이다.
이 조건은 2*6 = 3*4 와 같은 경우 때문에 필요하다.
그리고 가로가 길기 때문에 total/i 를 먼저, i 를 나중에 answer 에 넣어주면 된다.
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준/그리디/C++] 1931번 회의실 배정 * (0) | 2022.09.11 |
---|---|
[프로그래머스/JAVA] 체육복 (0) | 2022.03.01 |
[프로그래머스/Java] 모의고사 (0) | 2022.01.20 |
[프로그래머스/Java] 가장 큰 수 (0) | 2022.01.17 |
[프로그래머스/JAVA] K번째 수 (0) | 2022.01.12 |