제가 공부한 내용을 정리하는 블로그입니다.
아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
Programmers 알고리즘 고득점 Kit입니다.
포인트
갈색 타일과 노란색 타일의 합이 카펫의 전체 넓이를 구할 수 있습니다. 그를 이용해서 소인수를 통해 맞는 가로와 세로 값을 구하고 갈색 타일 수가 일치하는 값을 리턴합니다. 가로가 더 길어야 하므로 i가 큰 값으로 시작합니다.
소스코드
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = {0, 0};
int area = brown + yellow;
for (int row = area; row > 1; row--) {
if (area % row == 0) {
int col = area / row;
if ((row * 2 + (col - 2) * 2) == brown) {
answer[0] = row;
answer[1] = col;
return answer;
}
}
}
return answer;
}
}
코드 설명
- for (int row = area; row > 1; row--) { if (area % row == 0) { int col = area / row;
- row는 카펫의 가로 길이로, 전체 면적(area)의 약수를 찾기 위해 area부터 2까지 역순으로 탐색합니다.
- if (area % row == 0) 조건은 row가 area의 약수인지 확인합니다.
약수인 경우, 대응되는 세로 길이 col을 계산합니다 (col = area / row).
- if ((row * 2 + (col - 2) * 2) == brown) { answer[0] = row; answer[1] = col; return answer; } }
- (row * 2 + (col - 2) * 2) == brown 조건은 주어진 row와 col이 brown 타일 수를 만족하는지 확인합니다.
- row * 2는 위와 아래 테두리를 포함하는 타일 수입니다.
- (col - 2) * 2는 양쪽의 세로 테두리를 포함하는 타일 수입니다. 여기서 -2는 모서리 타일이 중복 계산되지 않도록 하는 역할을 합니다.
- 조건이 만족되면 answer 배열에 row와 col 값을 저장하고 반환합니다.
- (row * 2 + (col - 2) * 2) == brown 조건은 주어진 row와 col이 brown 타일 수를 만족하는지 확인합니다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[코딩테스트] Java 전력망을 둘로 나누기 (0) | 2024.11.13 |
---|---|
[코딩테스트] Java 피로도 (0) | 2024.11.13 |
[코딩테스트] Java 소수 찾기 (3) | 2024.11.13 |
[코딩테스트] Java 모의고사 (1) | 2024.11.13 |
[코딩테스트] Java 최소 직사각형 (0) | 2024.11.13 |