카펫 (Level2)
link - https://programmers.co.kr/learn/courses/30/lessons/42842
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 |
'Programmers' 카테고리의 다른 글
[Programmers] 소수찾기 - kotlin (0) | 2021.08.18 |
---|---|
[Programmers] 가장 긴 팰린드롬 - kotlin (0) | 2021.08.11 |
[Programmers] 괄호 회전하기 - kotlin (0) | 2021.07.15 |
[Programmers] 기능 개발 - kotlin (0) | 2021.07.11 |
[Programmers] 타겟 넘버 - kotlin (0) | 2021.07.10 |