문제 출처 - Programmers
문제는 여기
[풀이]
1. brown + yellow를 전체 격자 개수에 넣어준다.
2. 세로의 개수와 가로의 개수를 구해준다.
3. 세로의 개수가 가로의 개수보다 많으면 넘어간다.
4. 가로와 세로 모두 노란색을 갈색으로 감싸기 위해서는 상하좌우 모두 1개씩 있어야 하므로 가로 -2, 세로 -2를 곱한 개수가 노란색의 총개수와 같은지 구한다.
5. 같다면 해당 가로와 세로의 개수를 담아주고 반복문을 종료한다.
6. 결과를 출력한다.
[접근]
1. 세로와 가로의 곱이 조건을 만족하는 경우를 구하면 되겠다고 생각하였다.
[코드]
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
// 전체 격자 개수
int area = brown + yellow;
for (int i = 1; i <= area; i++) {
int row = i; // 세로
int col = area / row; // 가로
// 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
// 세로가 길면 돌아가기
if (row > col)
continue;
// 가로와 세로 모두 노란색을 감싸기 위해서는
// 상하좌우 각각 1개씩, 즉 세로 - 2, 가로 - 2가 노란색과 같아야한다.
if ((row - 2) * (col - 2) == yellow) {
answer[0] = col;
answer[1] = row;
return answer;
}
}
return answer;
}
}
'문제 풀이 > Programmers' 카테고리의 다른 글
[프로그래머스] 약수의 개수와 덧셈 (JAVA) (0) | 2022.05.03 |
---|---|
[프로그래머스] 문자열 내림차순으로 배치하기 (JAVA) (0) | 2022.05.02 |
[프로그래머스] 나머지가 1이 되는 수 찾기 (JAVA) (0) | 2022.04.30 |
[프로그래머스] 전화번호 목록 (JAVA) (0) | 2022.04.29 |
[프로그래머스] JadenCase 문자열 만들기 (JAVA) (0) | 2022.04.27 |