CodingTest/Kotlin으로 푼 코딩 테스트

[Kotlin / 코딩테스트] 프로그래머스 - 카펫

마볼링 2024. 4. 2. 21:16

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)
    }
}