삼각형 판별하기 풀이

··설명 약 6분·작성: 해비·블로그 소개

읽기 전에 알아두면 좋아요

아래 개념이 익숙하면 본문을 바로 읽으세요. 낯선 개념만 링크에서 복습하면 됩니다.

개념과 예제는 실행하지 않아도 읽을 수 있습니다. 내 컴퓨터·터미널에서 직접 실행하는 과정은 선택 실습입니다.

과정 위치와 선택 복습 안내

과정 위치: 준비와 기초 구현 · 문제

과정 위치는 이 글이 속한 묶음입니다. 이 단계의 모든 개념을 먼저 읽을 필요는 없습니다. 위에 연결한 개념 중 낯선 내용만 복습하세요. 문제의 조건·상태·갱신 순서는 익숙한 언어로 설명하면 됩니다.

JavaScript로 문법·실행 복습하기 (선택)

개념 글의 코드는 JavaScript 예시입니다. 문제 화면에서는 JavaScript·Python·Java·C++·C# 중 익숙한 언어의 함수를 작성하세요. 본문의 Node.js 입출력 예시는 로컬 실행을 위한 별도 안내입니다.

삼각형 판별 문제는 어떤 세 정수를 받아 가능 여부를 어떤 값으로 나타내나요?

세 개의 서로 다른 양의 정수로 삼각형을 만들 수 있는지 YES 또는 NO로 판별하는 문제입니다. 조건문·정수 비교의 기본을 준비하고, 아래 입력·반환 계약을 확인해 직접 풀어보세요.

적용 조건·범위: 나머지 두 막대의 합은 total - maxLength입니다. 판별식은 total - maxLength > maxLength로 쓸 수 있습니다. 부등호가 반드시 엄격한 >여야 한다는 점이 중요합니다. 같을 때까지 허용하는 >=를 사용하면 삼각형이 될 수 없는 경계 조건을 잘못 통과시킵니다.

공식 문서 참고: 관련 개념: 클라크대 유클리드 원론의 삼각부등식 · 관련 개념: MDN Math.max로 가장 긴 막대 선택

문제

삼각형 판별하기

문제 설명
길이가 서로 다른 A, B, C 세 개의 막대 길이가 주어지면 이 세 막대로 삼각형을 만들 수 있으면 “YES”를 출력하고, 만들 수 없으면 “NO”를 출력한다.

입력 설명
첫 번째 줄에 100이하의 서로 다른 A, B, C 막대의 길이가 주어진다.

출력 설명
첫 번째 줄에 “YES”, “NO”를 출력한다.

입력 예제 1
6 7 11

출력 예제 1
YES

입력 예제 1
13 33 17

출력 예제 1
NO

추가 제한 사항

없음

직접 풀어보기

먼저 선택한 언어의 입력·반환 계약에 맞춰 작성해 보세요. 힌트 받기와 정답과 비교하기는 코드를 실행하지 않는 AI 분석입니다. 해답·해설은 아래에서 필요할 때 펼칠 수 있습니다.

0 / 6,000바이트

서로 다른 양의 정수 a, b, c(각각 100 이하)를 solution(a, b, c)에 전달합니다. 삼각형을 만들 수 있으면 문자열 'YES', 없으면 'NO'를 반환합니다. 표준 입력 읽기나 console.log는 필요하지 않습니다. Tab은 다음 항목으로 이동합니다. 입력 영역 오른쪽 아래를 끌어 높이를 조절할 수 있습니다.

비밀키·개인정보는 입력하지 마세요. 코드는 이 페이지에만 유지됩니다.

해답·해설 보기
JavaScript 해답
function solution(a, b, c) {
    const total = a + b + c;
    const maxLength = Math.max(a, b, c);
    const restSum = total - maxLength;
    return restSum > maxLength ? 'YES' : 'NO';
}

서로 다른 양의 정수 a, b, c(각각 100 이하)를 solution(a, b, c)에 전달합니다. 삼각형을 만들 수 있으면 문자열 'YES', 없으면 'NO'를 반환합니다. 표준 입력 읽기나 console.log는 필요하지 않습니다.

원자료와 확인 범위

2026-10-12에 제공된 학습 자료 섹션 1. 기본문제풀이.pdf의 2쪽 ‘삼각형 판별하기’와 문제 조건·예제를 대조했습니다. 같은 ZIP의 해당 문제 TXT는 풀이 코드 자료입니다. 이 자료의 최초 출제 원문·저자·공개 배포 주소까지 확인한 것은 아닙니다.

이번 대조는 원자료의 문제 조건과 예제 확인입니다. 이 글의 전체 코드를 새로 실행하거나 공식 채점에 제출한 결과를 뜻하지 않습니다. 아래 예제·자가 확인 항목은 직접 실행해 기대 출력과 비교하는 기준입니다.

세 막대가 삼각형을 이루려면 어느 한 변의 길이도 나머지 두 변의 합보다 길거나 같아서는 안 됩니다. 세 조건을 모두 작성해도 되지만, 가장 긴 변만 정확히 찾으면 판단을 한 번으로 줄일 수 있습니다. 가장 긴 변이 조건을 만족하면 그보다 짧은 두 변에 대한 조건은 자연스럽게 만족하기 때문입니다.

따라서 세 길이의 전체 합과 최댓값을 구한 다음, 전체 합에서 최댓값을 빼 나머지 두 변의 합을 얻습니다. 나머지 합이 최댓값보다 클 때만 YES를 반환합니다. 두 값이 같은 경우에는 막대가 일직선으로 놓일 뿐 삼각형의 넓이가 생기지 않으므로 NO가 되어야 합니다.

알고리즘 설계

세 변 중 가장 긴 변과 나머지 두 변의 합을 비교하는 삼각형 판별 구조

먼저 a + b + c를 계산해 total에 저장합니다. 이어서 Math.max(a, b, c)로 가장 긴 막대의 길이를 구합니다. 정렬은 세 값의 전체 순서를 만들지만, 이 문제에서 필요한 정보는 최댓값 하나뿐이므로 Math.max로 필요한 값만 구하는 편이 목적에 잘 맞습니다.

나머지 두 막대의 합은 total - maxLength입니다. 판별식은 total - maxLength > maxLength로 쓸 수 있습니다. 부등호가 반드시 엄격한 >여야 한다는 점이 중요합니다. 같을 때까지 허용하는 >=를 사용하면 삼각형이 될 수 없는 경계 조건을 잘못 통과시킵니다.

const total = a + b + c;
const maxLength = Math.max(a, b, c);
const restSum = total - maxLength;

return restSum > maxLength ? 'YES' : 'NO';

이 설계는 가장 긴 변의 위치와 무관하게 같은 식을 사용합니다. A가 가장 길든 B나 C가 가장 길든 Math.max가 기준값을 정하고, 전체 합에서 그 값을 한 번만 빼면 비교 대상이 만들어집니다. 여러 갈래의 조건문으로 같은 계산을 반복하지 않아 코드의 의도도 분명해집니다.

첫 번째 원문 예제에서는 전체 합이 24이고 최댓값이 11이므로 나머지 합은 13입니다. 13이 11보다 크기 때문에 삼각형을 만들 수 있고 결과는 YES입니다. 두 번째 예제에서는 전체 합이 63이고 최댓값이 33이므로 나머지 합은 30입니다. 30은 33보다 크지 않으므로 결과는 NO입니다.

JavaScript 입력값에서 합계와 최댓값을 계산한 뒤 YES 또는 NO를 출력하는 흐름

완성 코드는 세 길이를 매개변수로 받는 solution 함수로 구성합니다. 제공된 작성 코드가 사용한 최댓값 비교와 전체 합 방식은 올바르므로 핵심 접근을 유지했습니다. 다만 answer, tot, max처럼 짧은 이름 대신 역할이 드러나는 total, maxLength, restSum을 사용해 계산의 의미를 바로 읽을 수 있게 했습니다.

함수 인수로 직접 확인하기

아래는 표준 입력 파일을 읽지 않는 완성 함수와 호출 예제입니다. 브라우저 개발자 도구 Console에 이 블록 하나를 붙여 넣거나, Node.js용 solution.cjs에 저장해 node solution.cjs로 실행합니다. 기존 호출의 인수 13, 33, 17은 NO가 기대값입니다. 호출 인수를 6, 7, 11로 바꾸면 YES여야 하며, 3, 4, 7로 바꾸면 두 짧은 변의 합과 가장 긴 변이 같아 NO입니다. 앞의 부분 조건식과 이 완성 함수를 함께 붙이지 않습니다.

function solution(a, b, c) {
  const total = a + b + c;
  const maxLength = Math.max(a, b, c);
  const restSum = total - maxLength;

  if (restSum > maxLength) {
    return 'YES';
  }

  return 'NO';
}

console.log(solution(13, 33, 17));

코드 흐름 설명

total은 세 막대 길이의 합이고, maxLength는 가장 긴 막대의 길이입니다. restSum에는 가장 긴 막대를 제외한 두 막대의 길이 합이 저장됩니다. 세 변수의 이름이 각각 계산 결과를 설명하므로 조건식만 보아도 무엇을 비교하는지 확인할 수 있습니다.

조건문은 앞에서 만든 restSum과 maxLength를 그대로 연결합니다. 참이면 YES, 거짓이면 NO를 반환하며, 출력 문자열은 원문과 같은 대문자를 사용해야 합니다.

마지막 호출은 제공된 작성 코드와 같은 두 번째 원문 예제를 사용합니다. solution(13, 33, 17)은 논리상 NO를 반환합니다. 첫 번째 원문 예제를 확인하려면 같은 함수에 6, 7, 11을 전달하면 됩니다.

복잡도와 검증

입력은 항상 세 값으로 고정되어 있습니다. 덧셈, 최댓값 계산, 뺄셈과 비교가 각각 상수 횟수만 실행되므로 시간 복잡도는 O(1)입니다. 입력 크기에 따라 반복 횟수가 늘어나는 반복문이나 재귀 호출도 없습니다.

추가로 사용하는 값은 전체 합, 최댓값, 나머지 합뿐이므로 공간 복잡도도 O(1)입니다. 입력 배열을 정렬하거나 별도의 자료구조를 만들지 않아 세 값 외에 필요한 메모리가 고정되어 있습니다.

원문 예제는 두 방향을 모두 확인합니다. 6 7 11에서는 나머지 합 13이 최댓값 11보다 커서 YES가 되고, 13 33 17에서는 나머지 합 30이 최댓값 33보다 작아서 NO가 됩니다. 또한 두 값이 정확히 같은 경계에서는 엄격한 부등식이 거짓이므로 NO가 됩니다.

검증할 때는 최댓값의 위치가 달라지는 경우, 길이 상한 100 이하의 입력, 반환 문자열의 대소문자를 함께 확인하면 됩니다. JavaScript의 일반적인 숫자 범위에서 이 문제의 연산은 정밀도 문제 없이 처리됩니다.

핵심은 세 변의 순서를 모두 구하는 것이 아니라 가장 긴 변과 나머지 합의 관계만 확인하는 것입니다. 필요한 정보만 계산하면 문제 조건을 짧고 명확하게 코드로 옮길 수 있습니다.

이 문제를 푼 뒤 확인하기

가장 긴 변이 나머지 두 변의 합과 같은 경우와 1만큼 작은 경우를 구분해 보세요.

본문의 예제와 이 반례를 직접 실행해 예상 출력과 비교하고, 결과가 다르면 입력 조건과 반복 범위를 다시 확인하세요.

글 소개·학습 준비·전체 목차
먼저 직접 풀어보세요

가장 긴 막대가 나머지 두 막대의 합보다 짧아야 삼각형입니다. 길이가 같으면 삼각형이 되지 않습니다. 6, 7, 11은 YES이고 13, 33, 17은 NO입니다. 아래에서 가장 긴 변을 찾고 한 번 비교합니다.

이 글이 도움이 되었나요?

조회 중

이어서 공부하기

체크포인트: 해설을 가리고 다시 풀고, 경계 입력을 하나 바꾸어 예상 결과와 실제 결과를 비교하세요. 직전 값과 지금까지의 최댓값을 구분하고, 초기값과 갱신 순서를 손으로 추적하세요.

다음 추천 · 문제: 연필 개수 풀이

같은 주제의 문제에 적용하며 방금 배운 개념을 확인합니다.

권장 순서는 학습 가이드와 같습니다. 다른 순서는 접힌 참고 목록에서 확인할 수 있습니다. 읽음 표시는 숙달이나 채점 결과가 아닙니다.

원래 과정 목록 순서 (선택)

읽음 기록

읽음 — / 전체 58개 · 필수 58개

이 글을 쓴 해비

웹사이트를 제작·운영하고, 개인 서비스와 자동화·AI 도구를 만듭니다. 직접 만들며 배운 내용과 문제 해결 과정을 BlogFlow에 기록합니다.

새 글 받아보기

RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.

RSS 피드 구독하기

댓글 남기기