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

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

읽기 전에 알아두면 좋아요

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

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

과정 위치와 선택 복습 안내

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

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

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

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

세 수 중 최솟값 문제의 자연수 범위와 정렬 사용 조건은 무엇인가요?

100 이하의 자연수 세 개에서 가장 작은 값을 구하는 문제입니다. 정렬을 사용하지 않는 조건을 확인하세요. 변수·조건문·함수의 반환값의 기본을 준비하고, 아래 입력·반환 계약을 확인해 직접 풀어보세요.

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

공식 문서 참고: 관련 개념: MDN if·else로 비교 결과에 따라 값 선택

문제

세 수 중 최솟값

문제 설명
100이하의 자연수 A, B, C를 입력받아 세 수 중 가장 작은 값을 출력하는 프로그램을 작성하세요. (정렬을 사용하면 안됩니다.)

입력 설명
첫 번째 줄에 100이하의 세 자연수가 입력됩니다.

출력 설명
첫 번째 줄에 가장 작은 수를 출력합니다.

입력 예제 1
6 5 11

출력 예제 1
5

추가 제한 사항

없음

직접 풀어보기

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

0 / 6,000바이트

solution(a, b, c)에 a(정수), b(정수), c(정수)를 전달하고 정수를 반환합니다. 아래 문제의 유효 입력 조건을 따릅니다. 표준 입력과 출력 코드는 작성하지 않습니다. Tab은 다음 항목으로 이동합니다. 입력 영역 오른쪽 아래를 끌어 높이를 조절할 수 있습니다.

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

해답·해설 보기
JavaScript 해답
function solution(a, b, c) {
    let best = a < b ? a : b;
    if (c < best) best = c;
    return best;
}

solution(a, b, c)에 a(정수), b(정수), c(정수)를 전달하고 정수를 반환합니다. 아래 문제의 유효 입력 조건을 따릅니다. 표준 입력과 출력 코드는 작성하지 않습니다.

원자료와 확인 범위

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

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

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

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

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

알고리즘 설계

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

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

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

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

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

JavaScript 조건문을 알고 Node.js가 준비되었다면 아래 전체 코드를 solution.cjs로 저장합니다. input.txt에는 6 5 11 한 줄을 넣습니다. Bash·명령 프롬프트는 node solution.cjs < input.txt, PowerShell은 cmd /c “node solution.cjs < input.txt”로 실행하며 기대 출력은 5입니다. 개수 3을 앞에 넣지 않고, 본문 변형처럼 최솟값이 첫째·둘째·셋째 위치인 경우도 같은 비교 규칙으로 확인하세요.

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

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

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

복잡도와 검증

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

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

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

이 문제를 푼 뒤 확인하기

유효한 입력 범위에서 7 7 7의 결과는 7, 100 100 1의 결과는 1인지 확인하세요. 자연수 문제이므로 음수는 필수 검증 입력이 아닙니다.

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

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

정렬하지 않고 먼저 두 수 중 작은 값을 고른 뒤 세 번째 수와 한 번 더 비교합니다. 6, 5, 11에서는 최솟값이 5입니다. 두 비교로 후보가 어떻게 바뀌는지 아래에서 따라가 보세요.

이 글이 도움이 되었나요?

조회 중

이어서 공부하기

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

다음 추천 · 문제: 삼각형 판별하기 풀이

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

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

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

읽음 기록

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

이 글을 쓴 해비

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

새 글 받아보기

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

RSS 피드 구독하기

댓글 남기기