문제
https://programmers.co.kr/learn/courses/30/lessons/42842
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public int[] solution(int brown, int yellow) { int sum = brown + yellow; int[] answer = new int[2];
for (int i = 2; i < sum; i++) { if (sum % i == 0) { int x = ((sum / i) * 2) + ((i * 2) - 4); int y = sum - x;
if (brown == x && yellow == y) { answer = new int[] {sum / i, i}; break; } } } return answer; }
|
흐름
- 갈색과 노란색을 더해 전체 크기를 구한다.
- 전체 크기를 2부터 반복한다. (1인 경우는 없으므로)
- i로 sum을 나눠서 떨어진다면, 즉 약수라면
- sum에서 i를 나눈 값에 2를 곱해서 위 아래 가로의 길이를 구하고
- i에 마찬가지로 2를 곱해서 좌 우 세로의 길이를 구하고
- 꼭지점들은 가로 세로가 겹치므로 -4를 한다.
- 이렇게 구한 갈색을 sum에서 빼서 노란색의 값을 구한다.
- 구한 갈색과 노란색 값이 넘겨받은 brown과 yellow와 같으면 끝
- 아니라면 반복한다.
- 끝
결과
번호 |
속도 |
테스트 1 |
통과 (1.57ms, 52.3MB) |
테스트 2 |
통과 (1.76ms, 51.1MB) |
테스트 3 |
통과 (1.88ms, 50.1MB) |
테스트 4 |
통과 (1.44ms, 52.7MB) |
테스트 5 |
통과 (1.52ms, 50.5MB) |
테스트 6 |
통과 (1.48ms, 49.8MB) |
테스트 7 |
통과 (1.62ms, 50.8MB) |
테스트 8 |
통과 (1.52ms, 52.6MB) |
테스트 9 |
통과 (1.58ms, 52.4MB) |
테스트 10 |
통과 (1.58ms, 50.4MB) |
테스트 11 |
통과 (1.53ms, 53MB) |
테스트 12 |
통과 (1.56ms, 52.3MB) |
테스트 13 |
통과 (1.48ms, 53.3MB) |
테스트 케이스
1 2 3
| assertArrayEquals(new int[]{4, 3}, test.solution(10, 2)); assertArrayEquals(new int[]{3, 3}, test.solution(8, 1)); assertArrayEquals(new int[]{8, 6}, test.solution(24, 24));
|