sooleeandtomas

[day11] 코딩테스트 알고리즘 - 완전 탐색 (카펫) python 본문

코딩테스트 알고리즘/탐색

[day11] 코딩테스트 알고리즘 - 완전 탐색 (카펫) python

sooleeandtomas 2022. 10. 7. 00:27

 

 

프로그래머스

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

programmers.co.kr

 

문제 풀이

문제는 어렵지 않은 것 같다.

(10,2)가 주어졌을 때, 전체의 블록 수를 구한다. => 12 (10 + 2)

for문을 돌면서 12의 약수를 구한다. (12 % i == 0)

for문은 12부터 2까지 돈다.

아래 이미지처럼 2보다 가로나 세로가 작게되면 가운데 블록이 0개가 되기때문에 2까지만 고려해준다.

[12,1],[6,2],[4,3][2,6][1,12] [가로,세로]

이 중에서 (가로-2) x (세로-2) == yellow가 되면 for문 박차고 나온다. 

아래 이미지처럼 노란색의 블록 개수는 (가로 - 모서리2개) * (세로 - 모서리2개) 이다.

 

 

나의 코드

def solution(brown,yellow):
  answer = 0
  total = brown + yellow
  for col in range(total, 2, -1): #가로가 더 커야되기 때문에 위에서부터 시작함.
    # 2보다 가로나 세로가 작게되면 가운데 블록이 0개가 되기때문에 2까지만 고려해준다.
    if (total % col ) == 0:
        row = total // col #주석이 아니라 나눈 후 소숫점을 빼준 값
        if (row - 2) * (col - 2) == yellow: #row - 위아래모서리, col - 오른쪽왼쪽모서리 2씩 빼줘야함. 
          answer = [col, row]
          break
  return answer

 

 

참고자료

https://docs.python.org/ko/3/tutorial/introduction.html

Comments