일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Brute Force
- Code Refactoring
- 정렬
- heap
- 그래프
- 카카오 기출
- binary search
- graph
- BFS
- 프로그래머스
- sort
- 동적계획법
- DFS
- 완전탐색
- string
- DVWA
- Queue
- 문자열
- Algorithm
- 코딩테스트
- Greedy
- django
- 큐
- programmers
- 알고리즘
- 백준
- 힙
- DP
- Dynamic Programming
- 탐욕법
Archives
- Today
- Total
생각과 고민이 담긴 코드
프로그래머스 - 카펫 (완전 탐색) / Level 2 본문
문제 설명
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] |
풀이
def solution(brown, yellow):
answer = []
sum_val = brown//2 + 2 # 가로 + 세로
multi_val = brown + yellow # 가로 * 세로
for height in range(sum_val):
for width in range(height, sum_val):
if width*height == multi_val and width + height == sum_val: # 조건에 맞는지 check.
answer.append(width)
answer.append(height)
return answer
연립방정식을 통해서 "가로+세로", "가로*세로" 값을 얻었고 각각의 값은 자연수이기 때문에
각각의 미지수에 값을 대입하여 찾듯이 순회하기로 하였다.
가로, 세로 각각의 값들은 그 값들의 합을 넘지 않을 것이기 때문에 최댓값을 합으로 잡고 순회하였으며
가로의 길이가 세로의 길이보다 길다는 조건을 사용하여
가로길이를 찾는 for문에서 최솟값을 세로 길이로 잡아서 시간 복잡도를 줄여 주었다.
이 문제가 왜 완전 탐색 카테고리에 속해 있을까?
이 문제를 수학적으로 풀면 두 개의 식이 나오는데
미지수 값들이 자연수라는 조건이 있기 때문에
특정 범위를 정하여 자연수들을 탐색하여 식을 만족하는지 체크해줘야 했다.
물론 이 두 개의 식을 통해 이차방정식을 만들어 근의 공식을 활용하여 푸는 방식도 존재하였다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 조이스틱 (Greedy) / Level 2 (0) | 2021.08.30 |
---|---|
프로그래머스 - 체육복 (Greedy) / Level 1 (0) | 2021.08.27 |
프로그래머스 - 소수 찾기 (완전 탐색) / Level 2 (0) | 2021.08.25 |
프로그래머스 - 모의고사 (완전 탐색) / Level 1 (0) | 2021.08.24 |
프로그래머스 - H-Index (정렬) / Level 2 (0) | 2021.08.23 |