세 수 중 최솟값 JavaScript 조건문 풀이 정리

2026.08.21·약 5분
먼저 직접 풀어보세요

문제 원문을 확인한 뒤 직접 풀이해 보세요. 해설과 정답은 아래 접힌 영역에서 확인할 수 있습니다.

문제

세 수 중 최솟값 문제 설명 100이하의 자연수 A, B, C를 입력받아 세 수 중 가장 작은 값을 출력하는 프로그램을 작성하세요. (정렬을 사용하면 안됩니다.) 입력 설명 첫 번째 줄에 100이하의 세 자연수가 입력됩니다. 출력 설명 첫 번째 줄에 가장 작은 수를 출력합니다. 입력 예제 1 6 5 11 출력 예제 1 5

추가 제한 사항

없음

풀이와 정답

풀이와 정답 보기 (클릭)

이 글은 세 수 중 최솟값 JavaScript 풀이를 기준으로, 문제 조건을 어떻게 코드로 옮기는지 차례대로 정리합니다. 입력은 100 이하의 자연수 세 개이고, 출력은 그중 가장 작은 값 하나입니다. 조건에서 정렬을 사용하지 말라고 했으므로 배열을 오름차순으로 정렬한 뒤 첫 번째 값을 고르는 방식은 피해야 합니다.

세 수만 비교하는 문제에서는 모든 값을 정렬할 필요가 없습니다. 필요한 정보는 전체 순서가 아니라 가장 작은 값 하나뿐입니다. 이 글에서는 문제 조건에 맞춰 조건문 비교로 최솟값을 갱신하는 흐름을 사용합니다.

입력 처리는 한 번만 정확히 해두면 됩니다. Node.js에서는 fs.readFileSync(0, 'utf8')로 표준 입력 전체를 문자열로 읽고, 앞뒤 공백을 제거한 뒤 공백 기준으로 나눕니다. 입력이 예제처럼 한 줄이어도 되고 줄바꿈이 섞여도 되도록 split(/\s+/)을 사용하며, 비교가 문자열 비교가 되지 않도록 map(Number)로 숫자 배열을 만듭니다.

알고리즘 설계

세 입력값 중 최솟값으로 좁혀지는 흐름

조건문으로 직접 설계하면 두 번의 비교로 충분합니다. 먼저 ab 중 작은 값을 정답 후보로 정하고, 그 후보와 c만 다시 비교합니다. 이 과정을 끝내면 정답 후보에는 세 수 중 최솟값만 남습니다.

이번 정답 코드에서는 먼저 ab 중 작은 값을 answer에 저장한 뒤, c가 현재 answer보다 작은지 한 번 더 확인합니다. 정렬 없이 필요한 비교만 수행하므로 문제 요구를 직접 충족합니다.

예를 들어 입력이 6 5 11이면 먼저 65를 비교해 answer5를 저장합니다. 이어서 115보다 작은지 확인하면 조건이 거짓이므로 정답은 그대로 5입니다. 세 값이 모두 같은 경우에도 첫 비교에서 선택된 값이 유지되므로 별도 예외 처리가 필요하지 않습니다.

JavaScript 풀이

첫 번째 값을 기준 최솟값으로 두고 차례로 비교하는 과정

완성 코드

const fs = require('fs');

const [a, b, c] = fs
  .readFileSync(0, 'utf8')
  .trim()
  .split(/\s+/)
  .map(Number);

let answer;

if (a < b) answer = a;
else answer = b;

if (c < answer) answer = c;

console.log(answer);

코드 흐름 설명

const [a, b, c]는 숫자로 변환된 입력의 첫 세 값을 각각의 변수에 담는 부분입니다. 첫 번째 조건문은 ab 중 작은 값을 answer에 저장하고, 두 번째 조건문은 c가 그 값보다 작을 때만 정답을 갱신합니다.

console.log(answer)는 계산한 최솟값을 출력합니다. 출력 설명에서 첫 번째 줄에 가장 작은 수를 출력하라고 했으므로, 추가 문장이나 배열 형태가 아니라 숫자 하나만 출력해야 합니다. 이처럼 입력, 계산, 출력의 단계를 분리하면 초급 문제에서도 실수를 줄일 수 있습니다.

더 짧게 쓰고 싶다면 Math.min(a, b, c)도 가능하지만, 여기서는 조건문 풀이에 집중합니다. 핵심은 세 값의 전체 순서를 만들지 않고 필요한 최솟값만 구하는 것입니다.

복잡도와 검증

비교 대상은 항상 세 개로 고정되어 있습니다. 따라서 입력 크기가 커질 여지가 없고, 실행 시간은 상수 시간인 O(1)입니다. 별도의 배열 정렬이나 반복적인 탐색을 하지 않으므로 문제 조건에 비해 충분히 단순한 풀이입니다.

메모리 사용량도 input 배열과 세 변수, 정답 변수 정도만 필요하므로 O(1)로 볼 수 있습니다. 세 자연수만 다루기 때문에 큰 자료구조가 필요하지 않습니다. 정렬을 사용하면 문제 조건에 맞지 않을 뿐 아니라, 이 문제에서는 불필요한 작업도 늘어납니다.

예제 입력 6 5 11은 수동으로 따라가면 655가 정답 후보가 되고, 11은 그보다 작지 않으므로 최종값은 5입니다. 경계값도 같은 방식으로 확인할 수 있습니다. 예를 들어 1 100 100이면 1, 100 1 100이면 1, 100 100 1이면 1이 출력되어 최솟값의 위치가 어디에 있어도 올바르게 처리됩니다.

이 글이 마음에 드세요?

RSS 피드를 구독하세요!

댓글 남기기