목차
728x90
반응형
문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
문제 풀이
처음 문제 풀이
- yellow의 약수를 구해 a 생성
- 약수의 중앙값을 뽑고 순서를 바꾸어 median에 추가
- yellow가 1일 경우는 약수의 중앙앖을 구할 수 없기 때문에 yellow 값 그대로 median에 추가
- 원인 : median 리스트의 요소의 곱이 yellow가 맞는지 확인하지 않음, yellow의 가로 세로의 합이 brown값인지 확인하지 않음
수정한 풀이
- 위 방식과 비슷하게 하고 가로, 세로 값의 곱이 yellow가 아닐 경우를 없애기 위해 반복문을 통해 짝지어지는 약수 값이 나올 수 있게 설정
- 조건문에서 가로, 세로의 합이 (brown-4) 나누기 2의 값이 맞는지 확인
정답 코드
def solution(brown, yellow):
answer = []
a = [] # yellow 약수 담을 리스트
for i in range(1, yellow+1): # 약수 구하기
if yellow % i == 0:
a.append(i)
for j in a:
b = yellow//j # 짝지어지는 약수의 다른 값
w, h = max(j,b), min(j, b)
if w * h == yellow and w + h == (brown-4)//2:
answer.append(w+2)
answer.append(h+2)
break
return answer
* 이 문제는 프로그래머스 코딩테스트 연습 2단계 문제입니다.
728x90
반응형
'Python > Coding Test' 카테고리의 다른 글
[Coding Test] 문자열 내 마음대로 정렬하기 (0) | 2023.07.21 |
---|---|
[Coding Test] 영어 끝말잇기 (0) | 2023.07.21 |
[Coding Test] 크기가 작은 부분문자열 (0) | 2023.07.14 |
[Coding Test] 삼총사 (0) | 2023.07.13 |
[Coding Test] 숫자의 표현 (0) | 2023.07.08 |