[프로그래밍 문제] 카펫
문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항
갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
입출력 예
brown yellow return
10 2 [4, 3]
8 1 [3, 3]
24 24 [8, 6]
생각한 방법
brown 개수는 높이2 + 넓이2 + 4(꼭짓점)으로 계산할 수 있으므로, yellow가 높이 1인 경우부터 2, 3.. 쭉 brown 개수가 일치할때까지 계산
class Solution {
public int[] solution(final int outline, final int width) {
for(int i=1;i==i;i++)
if(width%i==0 && (i*2+(width/i)*2+4) == outline)
return new int[] {(width/i)+2, i+2};
return null;
}
}
결과
정확성 테스트
테스트 1 〉 통과 (0.02ms, 72.9MB)
테스트 2 〉 통과 (0.02ms, 74.8MB)
테스트 3 〉 통과 (0.02ms, 74.6MB)
테스트 4 〉 통과 (0.02ms, 76.8MB)
테스트 5 〉 통과 (0.04ms, 79.1MB)
테스트 6 〉 통과 (0.01ms, 75.1MB)
테스트 7 〉 통과 (0.03ms, 76.6MB)
테스트 8 〉 통과 (0.02ms, 74.5MB)
테스트 9 〉 통과 (0.05ms, 77.6MB)
테스트 10 〉 통과 (0.05ms, 73.1MB)
테스트 11 〉 통과 (0.02ms, 93.7MB)
테스트 12 〉 통과 (0.03ms, 73.5MB)
테스트 13 〉 통과 (0.02ms, 77MB)
풀이 설명
for문에서는 i는 높이라고 보면된다. yellow를 높이로 나누면 yellow의 넓이를 구할 수 있다. 단 정확하게 나눴을때 0으로 나눠떨어져야 한다. i(높이) x 2 + (width(yellow) / i(높이)) x 2 + 4 식을 통해 해당 높이의 테두리를 구할 수 있다.
만약 해당 높이의 테두리 수가 outline(brown)과 같으면 해당 높이와 넓이 배열을 반환한다
Author And Source
이 문제에 관하여([프로그래밍 문제] 카펫), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@paulhana6006/프로그래밍-문제-카펫저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)