1. 문제
2. 생각대로 풀이
- 수학적으로 어떠한 공식이 나올꺼 같았다.
- 해보니 몇가지 공식이 나왔다
- 노란색 가로의 길이 = X, 세로의 길이 = Y 라고 할 때,
- xy = yellow
- 2(x+y)+4 = brown
- (x+2)*(y+2) = yellow + brown
- x와 y는 양의 정수이다.
- 3가지 공식을 반복문을 돌려서 찾았다.
class Solution {
fun solution(brown: Int, yellow: Int): IntArray {
var x = 1
while(true) {
if(2*x +(2*yellow)/x==brown-4) {
if((yellow/x+2)*(x+2) == brown + yellow) {
break;
}
}
x++
}
return intArrayOf(yellow/x+2, x+2)
}
}
- 회고
- var를 굳이 써야하는가?
- 반복문을 저렇게 밖에 돌릴 수 없는가?
- 저 식을 포함하는 x와 y의 값은 하나인데 왜 조건식이 두개여야 통과가 될까?
3. 회고 풀이
- x는 yellow의 길이를 넘을 수 없으므로 굳이 var를 쓸 필요가 없다
- 리턴된 yellow/x가 y이므로 나누어 떨어져야 한다.
class Solution {
fun solution(brown: Int, yellow: Int): IntArray {
for (x in 1..yellow) {
if (2 * x + 2 * (yellow / x) == brown - 4 && yellow%x == 0) {
return intArrayOf((yellow / x) + 2, x + 2)
}
}
return intArrayOf(0,0)
}
}