코딩테스트

카펫(2레벨)

dofury 2023. 1. 15. 23:06
728x90

class Solution {
    fun solution(brown: Int, yellow: Int): IntArray {
        var answer = IntArray(2,{0})
        var index = 0
        if(yellow/2 < 1)
        {
            index = 1
        }
        else
        {
            index = yellow/2
        }
        for(i in 1..index)
        {
            if(yellow % i == 0)
            {
                if(brown == ((yellow / i) * 2) + (i * 2) + 4)
                {
                    answer[0] = yellow / i + 2
                    answer[1] = i + 2
                    break
                }
            }
        }
        return answer
    }
}

이번 문제는 완전탐색이라 적혀있어서 탐색 알고리즘을 활용하는건가 싶었는데

일단 생각한대로 코딩하니까 쉽게 풀렸다.

 

해설

yellow의 형태(a x b)를 모르니까
반복문을 통해 a 값을 yellow값의 절반까지만 (a x b == b x a) 증가시켜준다.
이 때 yellow가 1일경우 0.5라 반복문이 돌아가지않기 때문에 조건문을 통해 최소한 1이 되게 해준다.
만약 a로 나눠진다면 b의 값도 정해지게 된다.
이 때 갈색카펫은 테두리에 있기 때문에 yellow 카펫의 (가로길이 x 2) + (세로길이 x 2) + 4(모서리 4개)가 맞는지
확인해준다. 만약 맞다면 이형태가 맞기 때문에 answer에 값을 집어넣고 break 한다. 

 

728x90