먼저 전체 카펫의 크기는 brown + yellow이다.
그리고 노란색 격자의 수는 1 이상이어야 하므로 세로의 길이는 3 이상부터 시작한다.
반복문을 3부터 시작하여 전체 카펫 크기와 세로 길이를 나누면 가로길이를 구할 수 있다.
구현 1 - 실패
import java.util.Arrays;
class Solution {
public int[] solution(int brown, int yellow) {
int totalSize = brown + yellow;
int col = 3;
int row = totalSize / col;
while (totalSize / col >= col) {
if (totalSize % col == 0) {
row = Math.min(row, totalSize / col);
}
col++;
}
int[] answer = new int[2];
answer[0] = row;
answer[1] = totalSize / row;
return answer;
}
}
가로길이가 세로 길이보다 길거나 같아야 하기 때문에 while문으로 row >= col을 종료 조건으로 사용했다.
col이 증가함에 따라 반복되는 횟수도 줄어들 것이라 생각해 while문을 사용했다.
Math.min을 사용한 이유는 totalSize가 나올 수 있는 여러 개의 가로/세로 길이 중,
가로는 가장 작은 값이어야 하고 세로는 가장 큰 값이어야 한다고 생각했기 때문이다.
마지막 입출력을 예로 들면, totalSize는 48이다.
48이 될 수 있는 가로/세로 길이는 [16, 3], [12, 4], [8, 6]이다.
그래서 row 값 중, 가장 작은 값이 될 수 있도록 Math.min을 사용했다.
구현 2
고려하지 않았던 부분
- 갈색 테두리 1줄
- 노란색 격자의 수
갈색 격자는 사각형 테두리 1줄밖에 없고, 노란색 격자가 사각형 내부를 채운다.
결국, (가로 - 2) * (세로 - 2)를 했을 때 노란색 격자의 전체 크기가 나온다.
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int totalSize = brown + yellow;
for (int col = 3; col <= totalSize; col++) {
if ((totalSize / col - 2) * (col - 2) == yellow) {
answer[0] = totalSize / col;
answer[1] = col;
break;
}
}
return answer;
}
프로그래머스 - 카펫
https://school.programmers.co.kr/learn/courses/30/lessons/42842
'코딩테스트 > 99클럽 4기' 카테고리의 다른 글
99클럽 코테 스터디 23일차 TIL (0) | 2024.11.19 |
---|---|
99클럽 코딩 테스트 22일차 TIL (1) | 2024.11.18 |
99클럽 코테 스터디 20일차 TIL (1) | 2024.11.16 |
99클럽 코테 스터디 19일차 TIL (1) | 2024.11.15 |
99클럽 코테 스터디 18일차 TIL (2) | 2024.11.14 |