개발자 유튜브를 운영중입니다. 구독 부탁드립니다.
문제 설명
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
'Javascript' 카테고리의 다른 글
[코딩테스트] 최댓값과 최솟값 - Lv2 (1) | 2023.10.29 |
---|---|
[javascript] async / await 짧은 정리 (0) | 2022.01.07 |
[코딩테스트/해시] 위장 by Programmers (0) | 2021.11.12 |
[코딩테스트/정렬] H-index by Programmers (0) | 2021.11.04 |
[코딩테스트/정렬] 가장 큰 수 by Programmers (0) | 2021.11.03 |
[코딩테스트/탐욕법(Greedy)] 체육복 by Programmers (0) | 2021.10.30 |
[코딩테스트] 주로 사용하는 원리 정리 (0) | 2021.10.28 |
댓글