-
[Swift] 카펫 프로그래머스 코딩테스트개발/Swift 2022. 1. 28. 15:43
염두 해야할것은 다음과 같다.
- 갈색,노란색의 합은 총 카펫의 격자수와 같다.
- 가로의 갯수 x 세로의 갯수를 y라고 두면
노란색 격자의 갯수는 x갯수에서 두개를 뺀값 y갯수에서 두개를 뺀 값과 같다.
두가지 조건을 충족하면 해당 문제의 답을 찾을수있다.
첫번째로 총 합을 구한후에 어떤수로 나누어 떨어지는지를 확인하면 사각형형태가 완성된다.
예로 총합이 20이라면 2,4,5,10 로 나누어 떨어진다.
나누어 떨어진 2,4,5,10 은 y의 갯수 ,
총합을 y로 나눈값은 x의 갯수가 된다. ex> 10,5,4,2
가로가 세로보다 더 길거나 같기 때문에
y가 작은 순부터 시작해서 먼저 발견되면 리턴하는식으로 구현하면 될것이다.
그리고 y가 2이하인 경우는 노란색이 나올수없으므로 패스하자.
let sum = brown + yellow for i in 3..<sum{ if(sum % i == 0){ let y = i let x = sum / i } }
사각형은 정사각형일수도 직사각형일수도있다. 직사각형도 높이에 따라 여러가지로 나뉠수있다.
여기서 노란색의 갯수를 체크 해보면된다.
(x - 2) * (y-2) 갯수 가 노란색 갯수와 같으면 해당 x, y 를 리턴하면된다.
func isSameYellow(x:Int,y:Int)-> Bool{ if((x-2)*(y-2) == yellow){ return true } return false }
전체 코드
func solution(_ brown:Int, _ yellow:Int) -> [Int] { let sum = brown + yellow var result = [Int]() func isSameYellow(x:Int,y:Int)-> Bool{ if((x-2)*(y-2) == yellow){ return true } return false } for i in 3..<sum{ if(sum % i == 0){ let y = i let x = sum / i if(isSameYellow(x: x, y: y)){ result.append(x) result.append(y) break } } } return result }
'개발 > Swift' 카테고리의 다른 글
[Swift] 큰수만들기 코딩테스트 프로그래머스 (0) 2022.02.09 UIApplication / @main/ AppDelegate 은 무엇일까? (0) 2022.02.04 [Swift] 소수 찾기 코딩테스트 프로그래머스 (0) 2022.01.25 [Swift] 가장 큰 수 코딩테스트 프로그래머스 (0) 2022.01.17 [Swift] 이준 우선 순위 큐 프로그래머스 코딩테스트 (0) 2022.01.13