경험의 기록

문제 : https://programmers.co.kr/learn/courses/30/lessons/42842

 

코딩테스트 연습 - 카펫

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

programmers.co.kr

 

 

class Solution {
    fun solution(brown: Int, yellow: Int): IntArray {
        var answer = intArrayOf()
        
        answer = find(brown,yellow)
        return answer
    }
    
    fun find(brown: Int, yellow: Int) : IntArray{
        val sum = brown + yellow
        var y = 3 // 세로길이 (yellow 가 1 이상이려면 세로길이는 최소 3 이어야함.)
        var x = 100000 // 가로길이 임의값
        
        // 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 김
        while(y<=x){
            // 소인수분해 되지 않으면 다음 값으로
            if(sum%y != 0){
                y++
                continue
            }
            x = sum/y
            
            val tmpBrown = x*2 + y*2 - 4  // 갈색 격자의 수
            val tmpYellow = sum - tmpBrown // 노란색 격자의 수
            
            // 찾는 값과 같다면 리턴
            if(tmpBrown == brown && tmpYellow == yellow){
                return intArrayOf(x,y)
            }
            y++
        }
        
        return intArrayOf(x,y)
    }
}

노란색 격자가 1이려면 최소 세로의 길이가 3 이어야하므로

세로의 길이 3부터 가능한 경우를 전부 탐색하여 조건에 맞는 결과값이 있을경우 리턴하였다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading