[Algorithm / 25.03.31] 프로그래머스 - 카펫

2025. 3. 31. 10:54·Algorithm

문제 설명

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

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 

내 풀이

import Foundation

func solution(_ brown:Int, _ yellow:Int) -> [Int] {
    
    var allCases = [Int: Int]()
    var result = [Int]()
    
    func calcAllCases(_ totalCount: Int) {
        for i in 1...totalCount {
            let j = totalCount / i
            guard totalCount % i == 0, i >= j else { continue }
            
            allCases[i] = j
        }
    }
    
    calcAllCases(brown + yellow)
    
    let keys = allCases.keys
    
    keys.forEach { key in
        let value = allCases[key]!
        if (key-2) * (value-2) == yellow {
            [key, value].forEach { result.append($0) }
        }
    }
    return result
}

 

결국 테두리가 1줄임이 포인트였음. 주석을 통해 접근을 시도했고 이를 식으로 어떻게 풀어버리지?라는 생각을 하면서 접근했다.

 

/* 총 개수 기준 경우의 수
10 + 2 = 12 ==> 4*3, 6*2, 12*1
8 + 1 = 9 ==> 3*3, 9*1
24 + 24 = 48 ==> 8*6, 12*4, 16*3, 24*2, 48*1

내부 노란 격자 기준 경우의 수
2 ==> 2*1
1 ==> 1*1
24 ==> 6*4, 8*3, 12*2, 24*1

가로 6+2 2줄 = 16, 4*2 = 8, 16 + 8 = 24 (24, 24의 경우)

총 개수 기준 순서쌍에서 -2씩 빼서 곱했을 경우 yellow의 개수가 나온다? ok.

*/

 

대충 사고의 흐름이 이렇게 흘러갔고 노란 격자와 총합 격자의 관계성을 인지하고 나서 이렇게 선조건 제시 후 순서쌍의 경우의 수 모두를 구하고 추가 작업을 통해 문제에서 요구하는 조건에 적합한 순서쌍을 구했다.

 

보통 딕셔너리의 경우 다른 컬렉션보다 좀 더 효율적인 면이 있다고 들어 이용을 해보았는데 아직 여기에선 얼마나 메리트있는지 파악하기 힘들었다. 조금 더 효율적인 방법이 있을 것 같아서 생각해봐야할 것 같다. 예를 들면 keys를 받고 정렬을 할지 말지 고민하다가 정렬을 하게 되면 추가 작업이 필요하게 되는 부분이니 하지않도록 했다. 더 작은 수일수록 확률에 가깝다는 증거도 없었고.

'Algorithm' 카테고리의 다른 글

[Algorithm / 25.04.04] 프로그래머스 - 피로도  (2) 2025.04.04
[Algorithm / 25.03.21] 달리기 경주  (0) 2025.03.21
[Algorithm / 25.03.20] 카드 뭉치  (2) 2025.03.20
[Algorithm / 25.03.18] 추억 점수  (5) 2025.03.18
[TIL / 25.03.11] 숫자 야구 게임을 만들어보았소.  (1) 2025.03.11
'Algorithm' 카테고리의 다른 글
  • [Algorithm / 25.04.04] 프로그래머스 - 피로도
  • [Algorithm / 25.03.21] 달리기 경주
  • [Algorithm / 25.03.20] 카드 뭉치
  • [Algorithm / 25.03.18] 추억 점수
subkyu-ios
subkyu-ios
subkyu-ios 님의 블로그 입니다.
  • subkyu-ios
    subkyu-ios 님의 블로그
    subkyu-ios
  • 전체
    오늘
    어제
    • 분류 전체보기 (54)
      • iOS (36)
        • Swift (36)
      • 내일배움캠프 (7)
      • Git, Github (3)
      • Algorithm (6)
      • 회고 (1)
      • 면접 질문 정리 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Swift
    KPT
    til
    프로그래머스
    UIKit
    Wil
    algorithm
    github
    사전캠프
    내일배움캠프
    의존성 주입
    TableView
    트러블슈팅
    회고
    알고리즘
    ios
    본캠프
    tabman
    stackview
    RxSwift
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
subkyu-ios
[Algorithm / 25.03.31] 프로그래머스 - 카펫
상단으로

티스토리툴바