상세 컨텐츠

본문 제목

[프로그래머스/JS] Lv2. 카펫

코딩테스트/프로그래머스

by 기며니 2021. 4. 26. 22:11

본문

728x90
728x90

✅ 문제 설명

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

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

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

🔎 제한 사항

  • 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
  • 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
  • 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

 

 

 

입출력 예

💡 내 코드

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를 해서 반복되는 횟수를 줄입니다..! 사실 카펫 모양을 보고 쫄았지만 천천히 문제를 읽고 그려가며 하니 쉽게 풀 수 있었습니다. 오늘도 역시 문제를 풀 때 꼼꼼하게 읽고 이해하는 것이 가장 중요하단 것을 깨닫게 되었습니다.

728x90
728x90

관련글 더보기

댓글 영역