프로그래머스 0단계 - 삼각형의 완성조건 2

이종현·2024년 1월 8일
0

코딩테스트

목록 보기
8/24
post-thumbnail

문제 설명

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.

  • 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.

삼각형의 두 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 나머지 한 변이 될 수 있는 정수의 개수를 return하도록 solution 함수를 완성해주세요.


제한사항

  • sides의 원소는 자연수입니다.
  • sides의 길이는 2입니다.
  • 1 ≤ sides의 원소 ≤ 1,000

입출력 예

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

💡 문제 이해하기 → 접근 방법 → 코드 설계 → 코드 구현

1. 문제 이해하기

  • 가장 긴 변이 두변의 합보다 작은 모든 자연수를 구한다.
  • 두 변의 최대 길이는 10^3을 넘어가지 않기 때문에 O(N^2)으로 풀어도 시간복잡도는 문제가 없어보인다.

2. 접근 방법

  • 직관적으로 생각하기
    • 배열의 요소(숫자)를 모두 더한다.
    • 배열의 요소 중 가장 큰 숫자를 구한다.
    • 두 개의 차이만큼 count 값을 올린다.
    • 가장 긴 변이 배열의 요소 중 하나일 경우 가장 큰 값보다 작거나 같으며 다른 요소 값보다 큰 값의 수를 구해서 count 값을 올린다.

3. 코드 설계

  • 직관적으로 생각하기
    • const sum = sides[0] + sides[1]
    • const maxNum = Math.max(sides[0], sides[1])
    • const minNum = Math.min(sides[0], sides[1])
    • count += sum - maxNum - 1
    • count += maxNum - minNum

4. 코드 구현

function solution(sides) {
  let count = 0
  const sum = sides[0] + sides[1]
  const maxNum = Math.max(sides[0], sides[1])
  const minNum = Math.min(sides[0], sides[1])
  count += sum - maxNum - 1
  let x = maxNum
  while (minNum + x > maxNum) {
    x--
    count++
  }
  return count
}

다른 사람 풀이

function solution(sides) {
  return Math.min(...sides)*2-1
}

회고

크게 어려운 문제는 아니였으나, 이번에도 직관적으로 생각해서 푸는 방법 밖에 떠오르지 않았다. 하지만 너무 조급해하지말고 차근차근 하나씩 풀어보는 걸 습관들인다고 생각하고 다른 사람들의 풀이과정도 자주 보도록 노력하자.

profile
데이터리터러시를 중요하게 생각하는 프론트엔드 개발자

0개의 댓글