CS/알고리즘_고득점 kit(자바)

카펫

Jedy_Kim 2021. 12. 21. 20:22
728x90

https://programmers.co.kr/learn/courses/30/lessons/42842

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과

programmers.co.kr

문제 설명
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의 가로길이는 yellow의 (가로 + 2) 이고,
세로 길이는 yellow의 (세로 + 2) 인데 여기서 가로와 세로를 구하는 것이다 관건이다.
아무 숫자나 가로/세로가 될 수 없으니..

brown의 가로 - 상 : ( yellow 가로 + 2)
brown의 가로 - 하 : ( yellow 가로 + 2) 
brown의 세로 - 상 : ( yellow 세로 + 2)
brown의 세로 - 하 : ( yellow 세로 + 2) 
이고 여기서 정확한 가로의 값과 세로의 값을 구하는면 답이다.

brown 24, yellow 24를 살펴보자
yellow 24의 약수는
(1, 24)
(2, 12)
(3, 8)
(4, 6)
이다.
(세로, 가로) 의 값이 되는 것이다. (지문에서 가로가 세로보다 같거나 크다라고 했으니.)
하나씩 다해보면되는데
"(가로 + 2) * 2 + (세로 * 2)" 를해준 값이 brown값과 일치하면 답인 것이다.

여기까지 이해를 했으면 이제 아래 코드를 보면 이해가될 것이다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.*;
 
 
class Solution {
    
    int Brown;
    
    
    public boolean getResult( int first, int second ) {
        int ret = ((first + 2* 2+ (second * 2);
        return (Brown == ret) ? true : false;        
    } 
    
    
    public int[] solution( int brown, int yellow ) {
        int[] answer = new int[2];
        
        Brown = brown;
        
        for ( int i = 1; i <= yellow; ++i ) {
            
            int head = yellow / i;
            int tail = yellow % i;
            
            if ( tail != 0 ) continue;
            if ( i > head ) break
            
            // 정답을 찾음
            if ( getResult( head, i ) ) {
                answer[0= head + 2;
                answer[1= i + 2;
                break;
            } 
        }        
        
        return answer;
    }
}
cs

 

 

반응형

'CS > 알고리즘_고득점 kit(자바)' 카테고리의 다른 글

조이스틱  (0) 2021.12.24
체육복  (0) 2021.12.22
소수 찾기  (0) 2021.12.20
모의고사  (0) 2021.12.17
H-Index  (0) 2021.12.16