문제
https://school.programmers.co.kr/learn/courses/30/lessons/42842
정답 코드
첫 번째 제출
def solution(brown, yellow):
answer = []
yellow_wh = (brown-4)/2
i=1
while i <= yellow_wh//2:
if i * (yellow_wh-i) == yellow:
answer.append((yellow_wh-i)+2)
answer.append(i+2)
break
i=i+1
return answer
- yellow_wh: yellow의 가로 길이+세로 길이
- brown = (yellow 가로 길이+세로 길이) * 2 + 4 이므로 중간 합을 기준으로 식을 변형하면 위 코드처럼 됨
- yellow_wh//2 까지 i 를 1씩 더하면서 반복문 돌리기: yellow = i + (yellow_wh-i) 조건에 맞는 쌍을 찾기 위함
- yellow 가로>=세로 길이 이므로 애초에 큰 숫자(yellow_wh - i)를 먼저 append 하면 정답 나옴
두 번째 제출 (다른 사람 풀이 참고)
def solution(brown, yellow):
yellow_wh = (brown-4)/2
i=1
while i <= yellow_wh//2:
if i * (yellow_wh-i) == yellow:
return [(yellow_wh-i)+2, i+2]
i=i+1
- answer 배열에 append 하지 않고, 바로 배열 형태로 return 하면 코드가 더욱 짧아짐
'Algorithm & SQL > Python' 카테고리의 다른 글
[Greedy] 배열 or 집합의 직접 탐색 | remove() 메서드 | 리턴 값 초기화의 중요성 (2) | 2024.01.09 |
---|---|
[Greedy] replace(old, new) 함수의 사용 (1) | 2023.12.06 |
[Greedy] 반복되는 로직은 배열에 넣고 순회 (1) | 2023.12.05 |
[Greedy] 테스트 케이스 수가 주어지지 않은 경우: 에러 처리 (1) | 2023.11.28 |
[Greedy] 큰 수 -> 작은 수로 탐색하며 몫만 필요할 때 (0) | 2023.11.28 |