Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 그래프 이론
- 구현
- 파이썬
- Python
- SW Expert Academy
- 다익스트라
- 완전탐색
- javascript
- 다이나믹 프로그래밍
- 문자열
- DP
- 브루트포스
- 너비우선탐색
- 백준알고리즘
- 백준 알고리즘
- 너비 우선 탐색
- 그리디 알고리즘
- 오라클
- SWEA
- 깊이우선탐색
- 데이터베이스
- 자바스크립트
- DFS
- 그래프 탐색
- 프로그래머스
- 백트래킹
- 스택
- 브루트포스 알고리즘
- oracle
- BFS
Archives
- Today
- Total
민규의 흔적
[JavaScript 자바스크립트] 프로그래머스 - 카펫 본문
2024년 6월 30일
문제 링크 : 프로그래머스 - 카펫
문제 접근
문제에 어떤 규칙이 있는지 먼저 알아야 한다고 판단했다.
1. 카펫 테두리 1줄은 갈색(brown)으로 칠해져 있다.
2. 테두리 1줄을 제외한 내부는 모두 노란색(yellow)이다.
3. 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 길다.
brown = 24, yellow = 24인 경우를 보자.
yellow가 24만큼 칸을 차지하려면 다음과 같은 가로, 세로 조합을 가질 수 있다.
가로 | 세로 |
24 | 1 |
12 | 2 |
8 | 3 |
6 | 4 |
각각의 모든 경우에, 테두리 1줄을 차지하는 brown 몇 칸을 차지하게 되는지를 계산해보고, brown이 24칸을 차지하는 경우의 가로,세로 조합을 출력하면 된다.
가로 | 세로 | brown |
24 | 1 | 54 |
12 | 2 | 32 |
8 | 3 | 26 |
6 | 4 | 24 |
brown이 24를 차지하는 경우는 yellow가 가로 = 6, 세로 = 4인 경우이다.
brown은 yellow를 1줄 만큼 더 둘러싸고 있으므로 카펫의 총 가로, 세로 길이 조합은 [8, 6]이 되는 것이다.
따라서, yellow가 N칸을 차지하고 있을 때, N의 약수를 모두 구하여 각 가로, 세로 조합쌍의 모든 경우를 확인하며 brown이 차지하는 칸의 개수만큼의 조합을 알아내어 카펫의 가로, 세로 길이를 구하면 된다.
전체 코드
function solution(brown, yellow) {
var answer = [];
// (가로 + 세로) * 2 + 4 == brown일 때의 [가로, 세로]가 정답
// Math.floor(yellow / 2) + 1 까지 확인하는 이유는 yellow가 1일 때도 있기 때문. + 1 을 해주지 않으면 반복문을 수행하지 않음
for (let i = 0; i < Math.floor(yellow / 2) + 2; i++) {
if (yellow % i === 0) {
if ((yellow / i + i) * 2 + 4 === brown) {
answer.push(yellow / i + 2);
answer.push(i + 2);
break;
}
}
}
return answer;
}
console.log(solution(8, 1))
풀이 후기
규칙을 찾아 yellow 개수의 약수를 구하고, 각 조합쌍의 모든 경우의 수를 체크하여 결과를 도출해야하는 완전탐색 문제였다.
'프로그래머스' 카테고리의 다른 글
[Python 파이썬] 프로그래머스 - 게임 맵 최단거리 (3) | 2024.07.05 |
---|---|
[Python 파이썬] 프로그래머스 - 전력망을 둘로 나누기 (0) | 2024.07.05 |
[Python 파이썬] 프로그래머스 - 의상 (0) | 2024.06.22 |
[Python 파이썬] 프로그래머스 - 소수 찾기(Lv 2) (0) | 2024.06.22 |
[Python 파이썬] 프로그래머스 - 섬 연결하기 (0) | 2024.06.18 |