한 걸음씩
[프로그래머스][JS] 카펫 ✅ 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
function solution(brown, yellow) {
const sum = brown + yellow
let divisor = []
// 연산수를 줄이기위해 제곱근 사용해서 약수 구하기
for (let i = 1; i <= Math.sqrt(sum); i++){
if (sum % i === 0){
divisor.push(i)
if (i !== sum / i){ // i와 짝꿍인 수 찾기
divisor.push(sum / i)
}
}
}
divisor.sort((a, b) => b - a)
let width, height;
for (let i = 0; i < divisor.length; i++){
width = divisor[i]
height = sum / divisor[i]
// 노란색 격자의 가로 길이 (width - 2), 세로 길이 (height - 2) ; 노란색을 제외한 갈색 부분
// 두 값의 곱이 yellow와 같다면 반환
if ((width - 2) * (height - 2) === yellow){
return [width, height]
}
}
}
리뷰
약수를 구하는 것까지는 쉽게 했는데 약수 중에서 리턴 값을 찾는 방법에 있어서 고민을 많이 했는데
처음에는 중앙값을 찾아서 반환했더니 일부 케이스를 통과하지 못했다
그래서 위의 코드처럼 카펫의 구조와 노란색 격자의 개수를 이용해서 풀었다
'Programmers' 카테고리의 다른 글
[프로그래머스][JS] 숫자의 표현 ✅ (0) | 2023.08.03 |
---|---|
[프로그래머스][JS] 조건에 맞게 수열 변환하기 2 ✅ (1) | 2023.07.26 |
[프로그래머스][JS] 점프와 순간 이동 ✅ (0) | 2023.07.25 |
[프로그래머스][JS] 짝지어 제거하기 ✅ (0) | 2023.07.21 |
[프로그래머스][JS] 연속된 수의 합 ✅ (0) | 2023.07.21 |