728x90
https://github.com/heesoo-park/ForCodeKata/tree/main/%EC%B9%B4%ED%8E%AB
https://school.programmers.co.kr/learn/courses/30/lessons/42842
처음에는 문제를 보고 고민을 했다.
어떻게 접근을 해야하나...
그러다가 주어지는 입력값을 보고 접근법을 떠올렸다.
"갈색과 노란색을 더하면 정사각형 또는 직사각형의 개수가 나오는구나
그러면 이걸 최소 세로 길이인 3부터 시작해서 만들어지는 사각형에 들어가는 갈색 또는 노란색의 개수를 체크하면 될 거 같은데?"
세로 길이를 기준으로 잡은 이유는 제한 사항 중에 '카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.'라고 되어 있었기 때문이다.
이 접근법으로 나온 코드는 다음과 같다.
class Solution {
fun solution(brown: Int, yellow: Int): IntArray {
var answer = intArrayOf()
var totalGrid = brown + yellow
for (row in 3..totalGrid / 3) {
if (totalGrid % row != 0) continue
var temp = totalGrid / row * 2 + (row - 2) * 2
if (temp == brown) {
answer += totalGrid / row
answer += row
break
}
}
return answer
}
}
(반복문 시작에 조건문이 들어가는 이유는 그냥 totalGrid와 row를 나누기만 하고 진행을 한다면 정사각형이나 직사각형이 아닌 다른 모양의 도형을 가지고 반복문을 진행하여 원하지 않는 결과가 나오기 때문이다.)
반응형
'Kotlin > Algorithm Problems' 카테고리의 다른 글
<프로그래머스> 괄호 회전하기(Lv.2) (0) | 2023.11.15 |
---|---|
<프로그래머스> 귤 고르기(Lv.2) (0) | 2023.11.15 |
<프로그래머스> 멀리 뛰기(Lv.2) (1) | 2023.11.14 |
<프로그래머스> N개의 최소공배수(Lv.2) (0) | 2023.11.14 |
<프로그래머스> 예상 대진표(Lv.2) (1) | 2023.11.13 |