읽기 전에 알아두면 좋아요
아래 개념이 익숙하면 본문을 바로 읽으세요. 낯선 개념만 링크에서 복습하면 됩니다.
- 기초 구현 패턴: 조건·정수 계산·순회·상태 갱신변수에 값을 담고 조건에 따라 합·개수·최솟값을 갱신하는 기초부터 확인합니다. 직전 값과의 비교와 첫 항목 처리의 차이를 확인합니다.
- JavaScript 배열: 인덱스 조회와 삽입·삭제 비용배열은 여러 값을 순서대로 담습니다. 인덱스로 값을 읽고 반복문으로 하나씩 살펴봅니다. 인덱스 접근과 배열을 순회할 때의 연산 비용을 확인합니다.
개념과 예제는 실행하지 않아도 읽을 수 있습니다. 내 컴퓨터·터미널에서 직접 실행하는 과정은 선택 실습입니다.
과정 위치와 선택 복습 안내
과정 위치: 준비와 기초 구현 · 문제
과정 위치는 이 글이 속한 묶음입니다. 이 단계의 모든 개념을 먼저 읽을 필요는 없습니다. 위에 연결한 개념 중 낯선 내용만 복습하세요. 문제의 조건·상태·갱신 순서는 익숙한 언어로 설명하면 됩니다.
JavaScript로 문법·실행 복습하기 (선택)
개념 글의 코드는 JavaScript 예시입니다. 문제 화면에서는 JavaScript·Python·Java·C++·C# 중 익숙한 언어의 함수를 작성하세요. 본문의 Node.js 입출력 예시는 로컬 실행을 위한 별도 안내입니다.
큰 수 출력하기에서는 수열의 어떤 원소를 결과로 출력하나요?
수열에서 문제의 이웃 비교 조건을 만족하는 원소를 출력하는 문제입니다. 배열·인덱스·조건문의 기본을 준비하고, 아래 입력·반환 계약을 확인해 직접 풀어보세요.
적용 조건·범위: 비교 기준은 지금까지 나온 최댓값이 아니라 현재 원소의 바로 앞 원소입니다. 예를 들어 9 다음에 5가 오면 5는 제외되지만, 그 다음 6은 5보다 크므로 선택됩니다.
공식 문서 참고: 관련 개념: MDN 엄격한 크기 비교
문제
N개의 정수가 주어질 때 각 수를 왼쪽부터 확인하여 바로 앞 수보다 큰 값만 출력하는 문제입니다. 첫 번째 수는 비교할 앞 수가 없으므로 조건과 관계없이 항상 출력합니다.
입력: 첫째 줄에 정수의 개수 N이 주어지고, 둘째 줄에 N개의 정수가 공백으로 구분되어 주어집니다. N의 범위는 1 이상 100 이하입니다.
출력: 조건을 만족하는 수를 입력 순서대로 한 줄에 공백으로 구분해 출력합니다.
| 예제 입력 | 비교 결과 | 예제 출력 |
|---|---|---|
6 |
7은 항상 선택, 9·6·12는 각각 바로 앞 수보다 큼 | 7 9 6 12 |
직접 풀어보기
먼저 선택한 언어의 입력·반환 계약에 맞춰 작성해 보세요. 힌트 받기와 정답과 비교하기는 코드를 실행하지 않는 AI 분석입니다. 해답·해설은 아래에서 필요할 때 펼칠 수 있습니다.
AI 힌트
코드를 실행한 채점 결과가 아닌 AI의 코드 분석입니다.
해답·해설 보기
function solve(input) {
const t = input.trim().split(/\s+/).map(Number);
const n = t[0], a = t.slice(1, n + 1);
return a.filter((x, i) => i === 0 || x > a[i - 1]).join(' ');
}
입력 예시 전체를 문자열로 전달하고 출력 문자열을 반환합니다. solve(input)를 호출합니다. 표준 입력·출력 코드는 추가하지 않습니다. 입력 공백과 LF/CRLF 줄바꿈을 처리합니다.
def solve(input):
t = list(map(int, input.split()))
n, a = t[0], t[1:1+t[0]]
return ' '.join(str(x) for i,x in enumerate(a) if i == 0 or x > a[i-1])
입력 예시 전체를 문자열로 전달하고 출력 문자열을 반환합니다. solve(input)를 호출합니다. 표준 입력·출력 코드는 추가하지 않습니다. 입력 공백과 LF/CRLF 줄바꿈을 처리합니다.
import java.util.*;
class Solution {
public String solve(String input) {
Scanner sc = new Scanner(input);
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) a[i] = sc.nextInt();
StringJoiner out = new StringJoiner(" ");
for (int i = 0; i < n; i++) if (i == 0 || a[i] > a[i - 1]) out.add(String.valueOf(a[i]));
return out.toString();
}
}
입력 예시 전체를 문자열로 전달하고 출력 문자열을 반환합니다. new Solution().solve(input)를 호출합니다. 표준 입력·출력 코드는 추가하지 않습니다. 입력 공백과 LF/CRLF 줄바꿈을 처리합니다.
#include <algorithm>
#include <sstream>
#include <string>
#include <vector>
std::string solve(const std::string & input) {
std::istringstream in(input);
int n;
in >> n;
std::vector < int > a(n);
for (int & x : a) in >> x;
std::ostringstream out;
out << a[0];
for (int i = 1; i < n; i++) if (a[i] > a[i - 1]) out << " " << a[i];
return out.str();
}
입력 예시 전체를 문자열로 전달하고 출력 문자열을 반환합니다. solve(input)를 호출합니다. 표준 입력·출력 코드는 추가하지 않습니다. 입력 공백과 LF/CRLF 줄바꿈을 처리합니다.
using System;
using System.Collections.Generic;
public class Solution {
public string Solve(string input) {
string[] t = input.Split((char[]) null, StringSplitOptions.RemoveEmptyEntries);
int n = int.Parse(t[0]);
int[] a = new int[n];
for (int i = 0; i < n; i++) a[i] = int.Parse(t[i + 1]);
var outp = new List < int >();
for (int i = 0; i < n; i++) if (i == 0 || a[i] > a[i - 1]) outp.Add(a[i]);
return string.Join(" ", outp);
}
}
입력 예시 전체를 문자열로 전달하고 출력 문자열을 반환합니다. new Solution().Solve(input)를 호출합니다. 표준 입력·출력 코드는 추가하지 않습니다. 입력 공백과 LF/CRLF 줄바꿈을 처리합니다.
원자료와 확인 범위
2026-10-12에 제공된 학습 자료 섹션 2. 1, 2차원 탐색.pdf의 1쪽 ‘큰 수 출력하기’와 문제 조건·예제를 대조했습니다. 같은 ZIP의 해당 문제 TXT는 풀이 코드 자료입니다. 이 자료의 최초 출제 원문·저자·공개 배포 주소까지 확인한 것은 아닙니다.
이번 대조는 원자료의 문제 조건과 예제 확인입니다. 이 글의 전체 코드를 새로 실행하거나 공식 채점에 제출한 결과를 뜻하지 않습니다. 아래 예제·자가 확인 항목은 직접 실행해 기대 출력과 비교하는 기준입니다.
비교 기준은 지금까지 나온 최댓값이 아니라 현재 원소의 바로 앞 원소입니다. 예를 들어 9 다음에 5가 오면 5는 제외되지만, 그 다음 6은 5보다 크므로 선택됩니다.
첫 원소를 결과 배열에 먼저 넣은 다음 인덱스 1부터 끝까지 순회합니다. 현재 값이 numbers[index - 1]보다 클 때만 결과에 추가하면 입력 순서도 자연스럽게 유지됩니다.
알고리즘 설계

- 첫 번째 수를 결과 배열에 넣습니다.
- 두 번째 수부터 현재 값과 바로 앞 값을 비교합니다.
- 현재 값이 더 클 때만 결과 배열에 추가합니다.
- 선택된 값들을 공백으로 이어 출력합니다.
이 방식은 주어진 비교 로직을 유지하면서 Node.js 표준 입력으로 실행하는 풀이입니다. 배열을 정렬하면 원래의 인접 관계가 사라지므로 정렬하지 않습니다.
현재 배열 원소와 직전 원소를 비교하는 반복문을 읽고 시작합니다. Node.js용 전체 코드를 solution.cjs로 저장한 뒤 input.txt에 예제의 개수 6과 수 7 3 9 5 6 12를 넣으세요. PowerShell 7은 Get-Content -Raw -Encoding UTF8 ./input.txt | node ./solution.cjs, Bash·명령 프롬프트는 node solution.cjs < input.txt로 실행합니다. 기대 출력 7 9 6 12 중 6이 선택되는 이유까지 확인하면 비교 기준을 점검할 수 있습니다. 실제 실행과 출력 일치는 이번 편집에서 확인하지 않았습니다.

const fs = require("fs");
const input = fs.readFileSync(0, "utf8").trim().split(/\s+/).map(Number);
const count = input[0];
const numbers = input.slice(1, count + 1);
const answer = [numbers[0]];
for (let index = 1; index < numbers.length; index += 1) {
if (numbers[index] > numbers[index - 1]) {
answer.push(numbers[index]);
}
}
console.log(answer.join(" "));
split(/\s+/)은 공백과 줄바꿈을 함께 구분하므로 LF와 CRLF 입력을 모두 처리합니다. trim()은 문자열 앞뒤의 불필요한 공백과 줄바꿈을 제거합니다.
복잡도와 검증
정수 N개를 한 번 순회하므로 시간 복잡도는 O(N)입니다. 입력 배열과 출력 배열은 각각 O(N) 공간을 사용하며, 출력 배열을 제외한 알고리즘의 추가 공간은 O(1)입니다.
| 검증 항목 | 입력 특징 | 기대 결과 |
|---|---|---|
| 원문 예제 | 증가와 감소가 섞임 | 7 9 6 12 |
| 원소 1개 | 비교 대상 없음 | 첫 수만 출력 |
| 내림차순 | 뒤의 수가 모두 작음 | 첫 수만 출력 |
| 같은 값 | 현재 값과 앞 값이 같음 | 같은 값은 선택하지 않음 |
반복문과 배열 출력의 기본 흐름을 더 연습하려면 1부터 N까지 합 출력하기 풀이도 함께 살펴보실 수 있습니다.
이 문제를 푼 뒤 확인하기
첫 원소가 출력되는 기준과 직전 값보다 작거나 같은 값이 나올 때를 확인해 보세요.
본문의 예제와 이 반례를 직접 실행해 예상 출력과 비교하고, 결과가 다르면 입력 조건과 반복 범위를 다시 확인하세요.
글 소개·학습 준비·전체 목차
핵심 요약
첫 번째 수는 항상 출력하고, 두 번째 수부터는 바로 앞 원소보다 큰 경우에만 결과에 추가합니다. 한 번의 배열 순회로 해결할 수 있습니다.
이 글이 도움이 되었나요?
이어서 공부하기
체크포인트: 해설을 가리고 다시 풀고, 경계 입력을 하나 바꾸어 예상 결과와 실제 결과를 비교하세요. 직전 값과 지금까지의 최댓값을 구분하고, 초기값과 갱신 순서를 손으로 추적하세요.
다음 추천 · 문제: 보이는 학생 풀이
권장 순서는 학습 가이드와 같습니다. 다른 순서는 접힌 참고 목록에서 확인할 수 있습니다. 읽음 표시는 숙달이나 채점 결과가 아닙니다.
원래 과정 목록 순서 (선택)
읽음 기록
읽음 — / 전체 58개 · 필수 58개
새 글 받아보기
RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.