본문 바로가기

Programmers

[Programmers] 카펫 - kotlin

카펫 (Level2)

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

 

코딩테스트 연습 - 카펫

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

programmers.co.kr

 

1. 문제 파악하기

가운데 노란 타일들과 노란타일 밖 한줄이 갈색 타일인 카펫이 있다

각 타일들의 개수가 주어질때 타일의 가로와 세로의 길이를 구한다 (한타일당 길이 1)

- 입력 :

brown :  갈색 타일 개수 

yellow : 노란 타일 개수

 

- 출력 :  카펫의 가로와 세로를 순서대로 출력한다

 

2. 아이디어

- 갈색 타일은 겉에 한 줄로 고정이 된다

- 즉 노란타일 그룹 직사각형의 가로 x / 노란타일의 세로 y 라고 가정했을때 갈색타일은 (x+y) * 2 + 4 가 된다

갈색 갈색 갈색 갈색
갈색 노랑 노랑 갈색
갈색 노랑 노랑 갈색
갈색 갈색 갈색 갈색

 - 위와 같다고 가정하면  노란 타일의 가로 x = 2 / 세로 y = 2

-  갈색 타일은 (2 + 2) * 2  + 4 =12 가 된다

- 그렇다면 노란 타일 개수로 만들수 있는 직사각형의 가로와 세로 의 경우의 수를 모두 탐색하며

- 노란 타일의 가로와 세로에  갈색타일의 개수가 맞아 떨어지는 경우를 구하여 카펫을 확정지은뒤 해당 카펫의 가로와 세로를 출력한다 

- 노란 타일에 해당하는 직사각형의 가로와 세로를 구하면 +2 를 하면 전체 카펫의 가로와 세로가 된다 (갈색 타일은 겉 테두리 한줄이기때문)

 

3. 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
    fun solution(brown: Int, yellow: Int): IntArray {
        var answer = MutableList<Int>(0, {0})
        for (i in 1 .. yellow/2 + 1) {
            for (j in 1 .. yellow/2 + 1) {
                if ((i * j) == yellow && (i + j) * 2 + 4 == brown) {
                    answer.add(j+2)
                    answer.add(i+2)
                    return answer.toIntArray()
                }
            }
        }
        return answer.toIntArray()
    }
}
cs