[완전탐색] 중학교 수학으로 빠르게 코딩하기
2024. 5. 28. 21:28ㆍ개발의 흔적/코딩테스트
https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr



문제를 다 읽었을 때 떠오른 2가지 방법론
1. yellow의 가로와 세로는, 무조건 전체 사각형의 가로 - 2 , 세로 - 2이다.
그리고 당연히 그 yellow의 가로x세로는 yellow 넓이이다.
2. 전체 brown block의 절반은, 전체 사각형 (가로 -1 ) + (세로 -1)
즉, 가로+세로-2이다.
문제가 어차피 완전탐색(그냥 싹 다 구해보는 거)이고, 최대 블록수가 2,005,000 <= 2억 이기 때문에
그냥 바로 코딩으로 돌입했다.
def solution(brown, yellow):
total = brown + yellow
answer = []
for i in range(3, total):
if total%i != 0:
continue
height = i
width = total / i
if height+width-2 == brown/2:
#if (height - 2) * (width - 2) == yellow:으로 대체해도 문제없다.
answer.append(int(width))
answer.append(height)
break
return answer
전체 블록수 (=전체 넓이)에 대해서 될 수 있는 가로 세로 중에서, (for문으로 i가 3일때부터 구했다, 어차피 yellow존재하려면 최소 가로세로의 길이는 3이니까)
위의 1번 혹은 2번을 만족한다면, 그것들을 return.
가로>=세로가 문제조건인데, for문에서 i가 작은값부터 시작해서 탐색하므로,
i가 세로, total/i가 가로라면 sort를 따로 안해도 된다.
'개발의 흔적 > 코딩테스트' 카테고리의 다른 글
| [dfs] dfs(recursion) vs permutations : 시간복잡도의 관점에서 무엇을 선택 할 것인가 (0) | 2024.05.30 |
|---|---|
| [완전탐색] 문제에서 '완전탐색일 수 밖에 없는 이유' 찾기 (0) | 2024.05.29 |
| [heap][hash] heap과 hash 동시사용으로 시간복잡도 효율 높이 (0) | 2024.05.25 |
| [Heap] heapq의 시간복잡도(1) (0) | 2024.05.24 |
| [Hash] Dictionary 시간복잡도 (2) - 시간초과 예시 (0) | 2024.05.22 |