프로그래머스 LV0 - 삼각형의 완성조건(2)


입출력 예를 보고 2가지의 조건으로 변의 개수가 도출되는것을 보고 for문을 통해 2가지 조건을 각각 만들었다

  • 입출력의 예시
    가장 긴 변이 6인 경우
    될 수 있는 나머지 한 변은 4, 5, 6 로 3개입니다.
    나머지 한 변이 가장 긴 변인 경우
    될 수 있는 한 변은 7, 8 로 2개입니다.
    따라서 3 + 2 = 5를 return합니다.
    
  • 시간 복잡도: O(n)
    def solution(sides):
      answer = []
      max_num = max(sides)
      min_num = min(sides)
    
      for i in range(1, max_num + 1):
          if max_num < min_num + i:
              answer.append(i)
    
      for j in range(max_num + 1, sum(sides)):
          if sum(sides) > j:
              answer.append(j)
    
      return len(set(answer))
    


그 외 풀이

def solution(sides):
    return 2 * min(sides) - 1

……🫠🫠🫠🫠 수학적 공식을 이용한 느낌.. 이렇게 풀었을때 얻기 힘든것은 조건에 해당하는 모든 값들을 나열해야 되는 경우에는 사용할 수 없는 풀이 방법이 되긴 한다
자.. 한번 이해해보도록 노력해보자

  • 풀이

      i) c가 a보다 크면 대소관계는 c > a > b가 된다
      a + b > c 이므로 a + b > c > a가 된다
    
      즉 이때 가능한 c의 갯수는 b - 1개
    
      ii) c가 a보다 작으면 대소관계는 a > b, a > c 가 된다
      b + c > a 이므로 b + c > a > c가 된다
    
      즉 이때 가능한 c의 갯수는 b - 1개
    
      iii) c와 a가 같으면 c = a 한 가지 밖에 존재하지 않는다
      다 합하면 (b - 1) + (b - 1) + 1 = 2 * b - 1 개가 된다
    
      이때 초기 조건에 따라 b는 a보다 작다
    

해설 참고 블로그



문제 출처