나의 풀이
from math import *
def solution(brown, yellow):
divisor = []
for i in range(1, int(sqrt(yellow))+1):
if yellow % i ==0:
divisor.append([yellow//i, i])
for y_width, y_height in divisor:
if brown ==(y_width+2)*(y_height+2)-yellow:
a, b=y_width+2, y_height+2
return a,b
▶ 일단 yellow의 약수의 순서쌍을 구한다. 다만, sqrt(n)까지만 구한다.
▶ 2차원 리스트의 각 행의 요소가 2개인 경우 y_width, y_height 2개의 임시변수로 접근할 수 있다.
▶ if brown ==(y_width+2)*(y_height+2)-yellow:
▶ (y_width+2)*(y_height+2) : 전체 격자의 개수 yellow : 노란색 격자의 개수
▶ 전체 격자의 개수 - 노란색 격자의 개수 = 갈색격자의 수
다른 사람의 풀이
def solution(brown, yellow):
for i in range(1, int(yellow**(1/2))+1):
if yellow % i == 0:
if 2*(yellow//i +i) == brown-4:
return [yellow//i+2, i+2]
▶ (브라운 가로 +브라운 세로)*2 - 4(브라운겹치는 부분제거) = 브라운 갯수
▶ (노란색 가로 + 노란색 세로)*2 + 4(부족한 부분 추가)= 브라운 갯수
▶ yellow // i는 노란색의 가로, i는 노란색의 세로를 의미한다.
'프로그래머스(파이썬) > LV.2(파이썬)' 카테고리의 다른 글
끝말잇기→인덱스 순환 +stack사용해서 중복체크, index+1은 사람번호, 인덱스 별도 저장★★+ turn//n+1 (0) | 2022.12.24 |
---|---|
짝지어 제거하기→크레인 인형 뽑기와 유사★★ (0) | 2022.12.24 |
다음 큰 숫자★→count()함수, int('숫자문자열', n)→n진법의 '숫자문자열'을 10진수로 (0) | 2022.12.24 |
이진변환 반복하기→ 특정 요소 제거★★ (0) | 2022.12.23 |
올바른 괄호 → 에러를 유도 + refactoring★★ (0) | 2022.12.23 |