728x90
1. 삼각형의 완성조건 (1)
문제 설명
선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.
나의 풀이
def solution(sides):
answer = 0
sum = 0
for i in sides:
sum += i
print(sum)
print(max(sides))
if max(sides) < sum - max(sides):
answer = 1
else:
answer = 2
return answer
sum(sides)가 안되는줄 알고 for문을 사용해서 sum을 구했다
if 문을 사용하는 부분을 더 간결하게 하는 방법 :
return 1 if max(sides) < (sum(sides) - max(sides) else 2
2. 삼각형의 완성조건 (2)
문제 설명
선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.삼각형의 두 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 나머지 한 변이 될 수 있는 정수의 개수를 return하도록 solution 함수를 완성해주세요.제한사항
나의 풀이
def solution(sides):
answer = 0
i = 1
while i <= max(sides):
if max(sides) < sum(sides)-max(sides)+ i:
i += 1
answer += 1
else:
i += 1
while i > max(sides):
if i < sum(sides) :
i += 1
answer += 1
else:
break
return answer
나머지 한변을 i로 두고 i가 sides의 최대값보다 작거나같을때와 클때를 나누어 while문으로 처리하였다.
다른분들의 풀이를 보며 배운 점
1) 수학적으로 생각하자
문제 그대로 조건을 하나하나 나열하는 것이 아닌 새로운 방향으로 생각해보는 것이 필요하다.
값을 모르는 정수 i가 max(sides)보다 작은경우 삼각형이 될 수 있는 i의 개수는
max(sides) < n + min(sides)
i 가 가장 큰 경우
sum(sides) > n
=> i의 개수는 sum(sides) - max(sides) + min(sides) -1 임을 알수있다.
def solution(sides):
return sum(sides) - max(sides) + min(sides) - 1
2) range 사용하기
while문을 사용해서 answer += 1을 반복 수행할 필요없이 정해진 조건에 맞추어 범위를 range로 지정하고 이의 길이를 구하는 방법으로도 사용할수있다.
def solution(sides):
return len(range(max(sides) + 1, sum(sides))) + len(range(max(sides) - min(sides) + 1, max(sides) + 1))
728x90
'프로그래머스' 카테고리의 다른 글
프로그래머스 Python 모음제거 / x만큼 간격이 있는 n개의 숫자 (4) | 2023.11.22 |
---|---|
프로그래머스 Python 최댓값 만들기 / Lv2 최댓값과 최솟값 (1) | 2023.11.20 |
프로그래머스 Python 대소문자 바꿔서 출력하기/ 배열에서 문자열 대소문자 변환하기 (6) | 2023.11.20 |
프로그래머스 Python 피자나눠먹기 (6) | 2023.11.20 |
프로그래머스 Python3 코드 처리하기 (7) | 2023.11.18 |