본문 바로가기
IT/CodingTest

[programmers] '삼각형의 완성조건(2)' 문제 해설 및 정답코드

by Echinacea 2025. 3. 25.
반응형

 

문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/120868

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

✅ 문제 개요

두 개의 선분 길이가 주어졌을 때, 삼각형을 만들기 위해 가능한 세 번째 변의 길이의 개수를 구하는 문제입니다.

 

삼각형이 성립하려면:

  • 어떤 한 변의 길이는 나머지 두 변의 길이의 합보다 작아야 합니다.

 

세 변을 a, b, c라고 할 때, 다음 조건이 반드시 성립해야 합니다:

a + b > c
b + c > a
c + a > b

 

이 문제에서는 두 변 a, b만 주어지고, 가능한 세 번째 변 x의 개수를 구해야 합니다.


 

 

예시

sides 가능한 x의 개수

[1, 2] 1
[3, 6] 5
[11, 7] 13

 

 

문제 해결 원리

 

🔹 삼각형 조건 해석

 

세 변이 a, b, x라고 할 때:

  • x가 가장 긴 변이라면: x < a + b
  • x가 가장 짧은 변이라면: x > |a - b|

 

따라서 가능한 x의 범위는 다음과 같습니다:

|a - b| < x < a + b

 

정수의 개수를 구해야 하므로, 위 조건을 정수 범위로 바꾸면:

(abs(a - b) + 1) <= x <= (a + b - 1)

 

이 범위 내에 포함되는 정수의 개수가 정답이 됩니다.


 

 

✅ 절댓값 abs의 사용 이유

예를 들어 a가 3이고 b가 6이라면, 차이는 6 - 3 = 3입니다. 그러나 입력이 [6, 3] 혹은 [3, 6]일 수 있으므로, 누가 더 큰지 판단하지 않고 항상 양수 차이를 구해야 합니다.

이를 위해 abs(a - b)를 사용하여 절댓값을 통해 안전하게 계산합니다.


 

 

✅ +1과 -1이 포함된 이유

 

우리가 구하는 범위는:

|a - b| < x < a + b

 

이때 x는 정수이므로 다음과 같이 바뀝니다:

(abs(a - b) + 1) <= x <= (a + b - 1)

 

여기서:

  • +1은 "보다 크다"를 정수 기준으로 표현하기 위한 것이며
  • -1은 "보다 작다"를 정수 기준으로 표현하기 위한 것입니다

즉, 정확한 정수 범위를 계산하기 위해 이 두 연산이 필요합니다.


 

 

🧱 코드 작성 과정 요약

  1. 최댓값 계산: a + b - 1
    • 세 번째 변 x는 a + b보다 작아야 하므로 마지막 정수는 a + b - 1
  2. 최솟값 계산: abs(a - b) + 1
    • x는 |a - b|보다 커야 하므로 첫 정수는 abs(a - b) + 1
  3. 가능한 정수 개수 계산:
    • (최댓값 - 최솟값 + 1)이 되며,
    • 이를 수식으로 간단히 하면: (a + b - 1) - abs(a - b)
  4. 파이썬 코드 구현:
def solution(sides):
    return (sum(sides) - 1) - abs(sides[0] - sides[1])

 

 

🔢 예제 검증

예제 1: sides = [1, 2]

  • 최솟값: |1 - 2| + 1 = 2
  • 최댓값: 1 + 2 - 1 = 2
  • 가능한 x: [2] → 정답: 1

예제 2: sides = [3, 6]

  • 최솟값: |3 - 6| + 1 = 4
  • 최댓값: 3 + 6 - 1 = 8
  • 가능한 x: [4, 5, 6, 7, 8] → 정답: 5

예제 3: sides = [11, 7]

  • 최솟값: |11 - 7| + 1 = 5
  • 최댓값: 11 + 7 - 1 = 17
  • 가능한 x: [5, 6, ..., 17] → 정답: 13

 

 

✅ 최종 코드 요약

def solution(sides):
    return (sum(sides) - 1) - abs(sides[0] - sides[1])

 

 

✅ 핵심 정리

항목 설명

삼각형 조건 어떤 한 변은 나머지 두 변의 합보다 작아야 함
가능한 x 범위 `
abs 사용 이유 두 변 중 어느 쪽이 큰지 몰라도 정확하게 계산하기 위해 필요
+1 / -1 이유 "보다 크다/작다"를 정수로 반영하기 위한 보정
정답 계산식 (a + b - 1) - abs(a - b)

 

 

 

반응형

댓글