최솟값 구하기 풀이|배열 순회와 비교 갱신 원리

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

읽기 전에 알아두면 좋아요

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

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

과정 위치와 선택 복습 안내

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

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

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

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

최솟값 구하기 문제는 수의 배열에서 어떤 값 하나를 반환하나요?

수의 배열에서 가장 작은 값을 찾아 반환하는 문제입니다. 배열·조건문·반복문의 기본을 준비하고, 아래 입력·반환 계약을 확인해 직접 풀어보세요.

적용 조건·범위: 입력은 7개의 수가 공백으로 구분되어 주어지고, 출력은 그중 가장 작은 값 하나입니다. 각 수의 범위는 문제에 별도로 제시되어 있지 않으므로 임의의 범위를 가정하지 않습니다.

공식 문서 참고: 관련 개념: MDN 엄격한 크기 비교로 최솟값 갱신

문제

한 줄에 주어진 7개의 수를 모두 확인하여 가장 작은 값을 출력하는 문제입니다. 숫자의 전체 순서를 구할 필요는 없으며, 최솟값 하나만 정확하게 찾으면 됩니다.

입력은 7개의 수가 공백으로 구분되어 주어지고, 출력은 그중 가장 작은 값 하나입니다. 각 수의 범위는 문제에 별도로 제시되어 있지 않으므로 임의의 범위를 가정하지 않습니다.

예제 입력
5 3 7 11 2 15 17

예제 출력
2

직접 풀어보기

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

0 / 6,000바이트

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

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

해답·해설 보기
JavaScript 해답
function solution(numbers) {
    let best = numbers[0];
    for (let i = 1; i < numbers.length; i++) {
        if (numbers[i] < best) best = numbers[i];
    }
    return best;
}

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

원자료와 확인 범위

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

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

정렬 없이 한 번의 순회로 해결할 수 있습니다. 첫 번째 수를 임시 최솟값으로 정한 뒤 남은 수를 왼쪽에서 오른쪽으로 비교합니다. 현재 수가 임시 최솟값보다 작을 때만 값을 바꾸면 마지막에는 전체 최솟값이 남습니다.

정렬한 뒤 첫 번째 원소를 선택하는 방법도 결과는 같지만, 이 문제는 전체 순서가 아니라 최솟값 하나만 요구합니다. 모든 원소의 순서를 새로 정하는 작업은 필요하지 않으므로 비교와 갱신만 수행하는 순차 탐색이 문제의 목표에 더 직접적으로 맞습니다.

순차 탐색은 입력 배열의 순서를 바꾸지 않는다는 장점도 있습니다. 원본 순서가 이후 처리에 필요하더라도 그대로 보존되며, 최솟값을 찾기 위한 상태도 하나뿐이라 풀이 흐름을 추적하기 쉽습니다.

알고리즘 설계

현재 최솟값과 각 항목을 비교해 더 작은 값으로 교체하는 흐름

알고리즘이 유지해야 하는 상태는 minValue 하나입니다. 반복문의 각 시점에서 minValue는 지금까지 확인한 수 중 가장 작은 값을 뜻합니다. 첫 번째 수를 넣어 시작하면 첫 번째 수까지만 본 시점의 조건은 자연스럽게 성립합니다.

문제에 숫자 범위가 명시되지 않았으므로 특정한 큰 상수를 초기값으로 정하는 방식은 피하는 편이 안전합니다. 실제 입력의 첫 값을 사용하면 범위를 추측할 필요가 없고, 모든 비교 대상이 같은 기준 안에서 처리됩니다.

두 번째 수부터는 현재 수와 minValue를 비교합니다. 현재 수가 더 작으면 새로운 최솟값을 발견한 것이므로 갱신하고, 더 크거나 같으면 기존 값을 유지합니다. 이 판단을 일곱 번째 수까지 반복하면 확인 범위가 전체 입력으로 넓어지므로 저장된 값이 최종 정답이 됩니다.

  • 입력된 7개의 수를 숫자 배열로 만듭니다.
  • 배열의 첫 번째 값을 현재 최솟값으로 초기화합니다.
  • 두 번째 값부터 마지막 값까지 순서대로 비교합니다.
  • 더 작은 값이 발견될 때만 현재 최솟값을 갱신합니다.
  • 순회가 끝나면 현재 최솟값을 출력합니다.

예제에서는 5로 시작한 뒤 3을 만나 처음 갱신됩니다. 7과 11에서는 그대로 유지되고, 2에서 다시 갱신됩니다. 이후 15와 17은 더 크므로 최종 결과는 2입니다.

let minValue = numbers[0];

for (let i = 1; i < numbers.length; i++) {
  if (numbers[i] < minValue) {
    minValue = numbers[i];
  }
}
입력값을 배열로 정리하고 순회 비교를 거쳐 최솟값을 출력하는 과정

제공된 입력 형식은 한 줄에 7개의 수가 바로 주어지는 방식입니다. 첫 번째 값이 원소 개수라는 설명은 없으므로 모든 입력값을 비교 대상에 포함해야 합니다. Node.js 환경에서는 표준 입력을 문자열로 읽고 공백 기준으로 나눈 다음 Number로 변환합니다.

아래 입력·출력 포함 전체 코드를 Node.js용 solution.cjs로 저장합니다. 첫 설계 블록은 숫자 배열이 준비되었다고 가정한 부분 코드입니다. input.txt에는 예제 5 3 7 11 2 15 17 한 줄만 넣으며 개수 7을 덧붙이지 않습니다. Bash·명령 프롬프트는 node solution.cjs < input.txt, PowerShell은 cmd /c “node solution.cjs < input.txt”로 실행합니다. 기대값 2와 각 비교에서 바뀐 임시 최솟값을 대조하세요.

const fs = require('fs');

const input = fs.readFileSync(0, 'utf8').trim();

if (input.length === 0) {
  process.exit(0);
}

const numbers = input.split(/\s+/).map(Number);

let minValue = numbers[0];

for (let i = 1; i < numbers.length; i++) {
  if (numbers[i] < minValue) {
    minValue = numbers[i];
  }
}

console.log(minValue);

빈 문자열일 때 종료하는 분기는 정상적인 7개 입력에서는 실행되지 않지만, 입력이 없는 환경에서 numbers[0]을 참조하는 상황을 막아 줍니다. 유효한 입력에 대한 알고리즘 흐름과 출력에는 영향을 주지 않습니다.

trim()은 입력 앞뒤의 불필요한 공백과 줄바꿈을 제거합니다. 이어서 split(/\s+/)은 하나 이상의 공백이나 줄바꿈을 기준으로 값을 나누고, map(Number)는 비교 가능한 숫자로 변환합니다.

minValue를 임의의 큰 숫자로 시작하지 않고 배열의 첫 번째 값으로 초기화하면 입력 범위를 몰라도 안전하게 비교할 수 있습니다. 반복문을 인덱스 1부터 시작하는 이유는 첫 번째 값이 이미 초기값으로 사용되었기 때문입니다.

조건식은 현재 원소가 저장된 최솟값보다 작은 경우만 처리합니다. 같은 값이 다시 등장하면 갱신하지 않아도 결과는 같고, 더 큰 값은 최솟값 후보가 될 수 없으므로 건너뜁니다. 반복이 끝난 뒤 한 번만 출력하므로 문제의 출력 형식과도 일치합니다.

복잡도와 검증

입력된 수의 개수를 n이라고 하면 첫 번째 값을 제외한 나머지를 한 번씩 비교하므로 비교 횟수는 최대 n - 1번입니다. 따라서 시간 복잡도는 O(n)입니다. 이 문제에서는 n이 7로 고정되어 있지만, 같은 풀이를 더 큰 배열에 적용해도 선형으로 증가합니다.

정렬을 사용하면 일반적으로 O(n log n)의 시간이 필요하고 입력 순서도 바뀔 수 있습니다. 순차 탐색은 정답에 필요한 비교만 수행하므로 이 문제에서는 시간과 목적 모두에 더 알맞습니다.

표준 입력을 숫자 배열로 저장하므로 배열에 필요한 공간은 O(n)입니다. 최솟값을 찾는 반복 과정에서 별도로 사용하는 값은 minValue와 반복 인덱스뿐이므로, 입력 배열을 제외한 추가 공간은 O(1)입니다.

예제 입력에서는 2가 출력되는 것을 확인할 수 있습니다. 또한 최솟값이 첫 번째에 있는 경우, 마지막에 있는 경우, 같은 최솟값이 여러 번 등장하는 경우, 7개의 값이 모두 같은 경우에도 동일한 비교 규칙으로 올바른 값이 유지됩니다. 이 네 경우는 최솟값의 위치와 중복 여부가 달라져도 알고리즘이 영향을 받지 않는지 확인하는 데 적합합니다.

중요한 점은 입력에 있는 7개의 수를 모두 비교 대상으로 사용하는 것입니다. 입력 개수를 별도의 첫 값으로 잘못 해석하면 실제 첫 번째 수가 비교에서 빠질 수 있으므로, 문제에 명시된 입력 형식을 그대로 따르는 것이 필요합니다.

이 문제를 푼 뒤 확인하기

최솟값이 첫 원소·마지막 원소에 있을 때와 모두 같을 때를 확인해 보세요.

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

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

7개의 수를 한 번씩 확인하며 현재 최솟값을 갱신하는 기본 배열 탐색 문제입니다. 해설과 정답은 아래 접힌 영역에서 확인할 수 있습니다.

이 글이 도움이 되었나요?

조회 중

이어서 공부하기

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

다음 추천 · 문제: 홀수 풀이: 조건 판별과 결과 처리 정리

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

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

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

읽음 기록

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

이 글을 쓴 해비

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

새 글 받아보기

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

RSS 피드 구독하기

댓글 남기기