알고리즘 문제 풀기(프로그래머스)
https://github.com/hoinlee-moi/Algorithm
JS기본문법 다시 공부
https://github.com/hoinlee-moi/ModernJS
React 강의 듣기
https://github.com/hoinlee-moi/React_prac
오늘 알고리즘
카펫 - https://school.programmers.co.kr/learn/courses/30/lessons/42842
function solution(brown, yellow) {
let area = measure(brown+yellow);
let wh = [];
for(let i=0; i<=area.length-1;i++){
wh.push(area[i])
if(wh.length===2){
if((wh[0]-2)*(wh[1]-2)===yellow) break;
else {
wh.pop()
wh.pop()
}
}
}
if(wh.length===1) return [wh[0],wh[0]]
return [wh[1],wh[0]];
}
const measure = num => {
const divisors = [];
for(let i = 1 ; i <= Math.sqrt(num) ; i++){
if(num % i === 0) {
divisors.push(i);
if(num / i != i) divisors.push(num / i);
}
}
return divisors;
}
많이 특이한 방법으로 푼 것 같다. 넓이를 알고 있을 때 가로와 세로의 길이는 약수가 된다는 것을 이용하여 나올 수 있는 가로세로 경우의 수를 구하는 방식으로 했다.
measure
를 구성한다.i
가 1부터 쭉 늘어나며 약수를 구할 수의 제곱근까지만 계산하며 넣는 방식을 이용하면 각각 짝지어지는 약수 순으로 배열이 구성된다.wh
를 선언하고 반복문을 통해 wh
에 가로세로순으로 담은 뒤 length
검사로 가로세로가 담기면 노란색 타일의 넓이와 같은지 확인한다.wh
에 담겨있으니 각 길이의 2를 뺀 값을 곱한 값이 주어진 노란색 타일 범위의 값(yellow
)과 같은지 확인한다.wh
의 길이가 1인 경우를 체크하여 검사하면 된다.function solution(brown, red) {
var answer = [];
for (var i = 3; i <= (brown+red)/i; i++) {
var x = Math.floor((brown+red)/i);
if( (x-2)*(i-2)=== red) {
break;
}
}
return [x,i];
}
훨씬 더 간단하게 풀이된 코드이다.
카펫의 최소 세로 길이는 3부터 이다( 노란색이 1이라도 존재한다면 위 아래 갈색으로 3이기 때문)
세로길이를 하나씩 늘려가며 넓이는 가로세로 합이기때문에 총 합에서 세로길이를 나눈 값이 가로이다
그리고 위에서 내가 한 것처럼 가로길이와 세로길이에서 2를 뺀 값을 곱한 값이 내부 타일과 같은지 확인한다.