Javascript

[코딩테스트] 스킬 체크 테스트 Level.2 by Programmers

yoonjong Park 2022. 6. 20.

개발자 유튜브를 운영중입니다. 구독 부탁드립니다.

 

리코딩 ReCoding

PM으로 일하다 38살에 프론트 엔드 개발자로 전직했어요. 코딩을 모르던 잘 모르는 상태에서 이직을 꿈꾸시는 분들... 그리고, 다시 코딩을 시작해보고 싶으신 분들과 이야기를 나누겠습니다.

 

문제 설명

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

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

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

제한사항

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

입출력 예

BROWN YELLOW RETURN
10 2 [4, 3]
8 1 [3, 3]
24 24 [8, 6]

 

내가 작성한 코드

function solution(brown, yellow) {
     
    let answer = [];
    const sum = brown + yellow;
    
    for (let i=3; i<sum; i++){
        if(sum % i === 0){
            const width = sum / i;
            const height = i;
            if((width-2)*(height-2) === yellow){
                answer = [width, height]
                break;
            }
        }
    }
    return answer;
}

배운 점 or 느낀 점

조건을 찾는 게 중요했다. 이건 마치 like 수능...? 같은 느낌이다. 

타일이 무조건 3개 이상이 된다. 가로든 세로든. yellow 타일을 감싸야 하기 때문이다.

그러고 나서, yellow의 값을 찾는 것도 주요했다.
외곽 테두리를 제거하고 난 width 타일 * height 타일 = yellow 타일 수 이다.
이 부분을 수식으로 바꾸면, (width*2) * (height *2) === yellow 가 된다. 이 조건을 충족하면, answer가 된다.

 

문제가 생각보다 간단했다. 흠...결국 또 느낀다.

코테는 이런 저런 문제를 많이 접해보는 게 답인 것 같다. 많이 푸는 것보다 많이 접하는 게 더 중요한 느낌이랄까...

 

출처 :

https://hsin.hr/coci/archive/2010_2011/contest4_tasks.pdf

https://programmers.co.kr/skill_checks/380431

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

댓글