-
[Swift] 알고리즘 공부 - 카펫알고리즘 공부/프로그래머스 2024. 2. 13. 23:41반응형
문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
입출력 예
brwon yellow return 10 2 [4, 3] 8 1 [3, 3] 24 24 [8, 6] 설명
1. brown, yellow 블록들의 갯수를 합한 값이 총 둘레의 길이여서 1부터 brwon + yellow 값을 for문을 돌린다.
2. for문에서 i값을 가로, sum에서 i값을 나눈 값을 세로값으로 선언한다. 이때 세로값이 나누어 떨어져야 하기 때문에 if문으로 나머지값이 0인경우만 저장한다.
3. 노란색 카펫의 넓이는 (width - 2) * (height - 2)으로 계산된다. 노란색 카펫의 가로, 세롵 길이는 테두리 갯수 2를 빼서 계산한다.
import Foundation func solution(_ brown:Int, _ yellow:Int) -> [Int] { var sum = brown + yellow for i in 1...sum { if sum % i == 0 && i >= sum/i { var width = i var height = sum / i if (width - 2) * (height - 2) == yellow { return [width, height] } } } return [] }
반응형'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[Swift] 알고리즘 공부 - 점프와 순간이동 (0) 2024.03.10 [Swift] 알고리즘 공부 - 영어 끝말잇기 (0) 2024.03.10 [Swift] 알고리즘 공부 - 짝지어 제거하기 (1) 2024.02.06 [Swift] 알고리즘 공부 - 피보나치 수 (1) 2024.02.05 [Swift] 알고리즘 공부 - 다음 큰 숫자 (1) 2024.01.30