프로그래머스- 40

김정현·2023년 6월 8일
0

프로그래머스

목록 보기
40/46
post-thumbnail

Level 3문제는 손을 대 봤지만 너무 어려워서 학습이 불가한 수준이라 Level 2로 살짝 내려왔다.
우선 좀 어느정도 수준의 문제에 와서는 그냥 직접 해결하는 것보다 이해하는 것부터가 좀 어려웠다. 그리고 내가 return해야하는 것을 표현을 할 수 있어야 했다.

우선, brown 과 yellow가 주어졌을때, 이 수들을 이용해 가로와 세로로 변환해야 했다.

  • brown + yellow = x * y

([x, y]라 가정)

이렇게 방정식을 세울 수 있다. 그리고 구체적인 x, y 를 확정시키기 위해 한 가지 더 식을 세우자면

  • (x-2) * (y-2) = yellow

저 그림에 대조했을때 이런 식을 세울 수 있다. 이러한 식을 바탕으로 코드를 대입할 수 있는 가를 묻는 것이 알고리즘 문제인 거 같다고 느꼈다.

처음 시도는

import Foundation

func solution(_ brown:Int, _ yellow:Int) -> [Int] {
    var sum = brown + yellow
    var result = [Int]()
    for i in 3...sum{
        if sum % i == 0 {
            var j = sum / i
            if (i-2) * (j-2) == yellow{
                result.append(i)
                result.append(j)
            }
        }
    }
    return result
}

이렇게 구성했는데 실패했다. 그래도 세가지 케이스 중 하나는 성공해서 희망적이었고 꽤 그럴듯하게 짰다고 생각했다. 앞서 말한 것처럼 먼저 논리를 정리하고 코드를 구성할 생각을 하니 한결 수월했다. 코드가 4개씩 추가된 부분이 있는데 그것들만 잘 수정하면 될 것 같다. [3, 4, 4, 3] 이런식으로 가로 세로가 바뀌게 추가된거 같다.

import Foundation

func solution(_ brown:Int, _ yellow:Int) -> [Int] {
    var sum = brown + yellow
    var result = [Int]()
    for i in 3...sum{
        if sum % i == 0 {
            var j = sum / i
            if (i-2) * (j-2) == yellow && i >= j{
                result.append(i)
                result.append(j)
            }
        }
    }
    return result
}

이렇게 논점을 집어가며 푸니까 오류가 발생하더라도 쉽게 해결 할 수 있었다.
다른사람의 풀이를 보아도

import Foundation

func solution(_ brown:Int, _ red:Int) -> [Int] {
    var result:[Int] = []

        let sum = brown + red
        print("sum = \(sum)")
        let limit = Int(sqrt(Double(sum)))
        print("limit = \(limit)")

        for i in 3..<limit+1 {
            if (sum % i) == 0 {
                let a = sum/i
                if ((a-2)*(i-2)) == red {
                    result.append(a)
                    result.append(i)
                    break
                }
            }
        }
        return result
}

(이전엔 red 였던듯함)
좀더 길게 복잡하게 적었지만 그 구조 자체는 비슷함을 알 수 있었다. 이로써 알고리즘을 푸는 구조에 대해서 조금은 안듯한 기분이다.

0개의 댓글