코드는 쉽지만, 방법을 생각하지 못했다.
시간을 천천히 갖고 고민해야 하는데
항상 빠르게 답을 보게 된다.
이것도 아차! 한 문제 (아쉽..)
항상 한 번 더 생각해보자!
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
설계
알고리즘 설계[접근 방법 ] : 약수 구하기
brown과 yellow의 격차 개수의 합은 카펫의 넓이가 되고, 카펫의 가로길이 * 세로길이 또한 카펫의 넓이다.
그러므로 brown과 yellow의 개수를 더한 값의 약수를 구하면, 가로길이와 세로길의의 값을 구할 수 있게 된다.
가로 길이가 세로길이보다 항상 크거나 같으므로, 약수를 구할 때 반복문의 조건에서 제곱근을 활용했다.
코드
import java.util.*;
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = {};
int area = brown+yellow; //카펫 넓이
//가로 세로를 담을 리스트 생성
List<int[]> list = new ArrayList();
//약수 구하기 > i가 세로
for(int i=1; i<=Math.sqrt(area); i++){
if(area%i==0) { list.add(new int[] {area/i, i}); }
}
//가로 길이가 brown의 개수와 맞는지 확인
for(int i=0; i<list.size(); i++){
int r = list.get(i)[0]; //가로
int c = list.get(i)[1]; //세로
if(((2*r)+(2*c)-4)==brown) answer=list.get(i);
}
return answer;
}
}
(❁´◡`❁)
끝!
'[자료구조] 알고리즘' 카테고리의 다른 글
[백준] 2012번 등수 매기기 (그리디알고리즘_JAVA) (0) | 2023.07.29 |
---|---|
[백준] 6118번 숨바꼭질 (BFS_JAVA) (0) | 2023.07.14 |
[프로그래머스] k번째 수 (JAVA) (0) | 2023.07.07 |
[프로그래머스] 카드 뭉치 (JAVA) (0) | 2023.07.06 |
[백준] 14719번 빗물(구현_JAVA) (0) | 2023.07.03 |