Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
function solution(brown, yellow) {
let answer = []; // 카펫의 가로, 세로 크기
let divisor = []; // 약수를 담기 위한 배열
let size = brown+yellow; // 총 카펫 격자의 갯수
for(let i =1; i*i<= yellow; i++){ // 약수 구하기
if(yellow%i==0){ // 나누어 떨어지면 divisor에 push!
divisor.push([i,yellow/i]);
}
}
divisor.forEach(function(arr){ // 배열 하나씩 꺼내오기
let width = arr[1]+2; // 노란색 격자의 가로 +2
let height = arr[0]+2; // 노란색 격자의 세로 +2
if(width*height === size){ // 가로 세로를 곱했을 때 size와 같다면
answer.push(width, height); // answer에 추가해서 return 하기;
return; // forEach에서 빠져나가기
}
})
}
정확성: 100.0
합계: 100.0 / 100.0
약수를 구할 때 i*i를 해서 반복되는 횟수를 줄입니다..! 사실 카펫 모양을 보고 쫄았지만 천천히 문제를 읽고 그려가며 하니 쉽게 풀 수 있었습니다. 오늘도 역시 문제를 풀 때 꼼꼼하게 읽고 이해하는 것이 가장 중요하단 것을 깨닫게 되었습니다.
[프로그래머스/JS] Lv2. 영어 끝말잇기 (0) | 2021.04.28 |
---|---|
[프로그래머스/JS] Lv2. 다음 큰 숫자 (0) | 2021.04.27 |
[프로그래머스/JS] Lv2. 올바른 괄호 (0) | 2021.04.25 |
[프로그래머스/JS] Lv1. 키패드 누르기 (0) | 2021.04.24 |
[프로그래머스/JS] Lv1. 체육복 (0) | 2021.04.23 |
댓글 영역