핵심 요약
첫 번째 수는 항상 출력하고, 두 번째 수부터는 바로 앞 원소보다 큰 경우에만 결과에 추가합니다. 한 번의 배열 순회로 해결할 수 있습니다.
문제
N개의 정수가 주어질 때 각 수를 왼쪽부터 확인하여 바로 앞 수보다 큰 값만 출력하는 문제입니다. 첫 번째 수는 비교할 앞 수가 없으므로 조건과 관계없이 항상 출력합니다.
입력: 첫째 줄에 정수의 개수 N이 주어지고, 둘째 줄에 N개의 정수가 공백으로 구분되어 주어집니다. N의 범위는 1 이상 100 이하입니다.
출력: 조건을 만족하는 수를 입력 순서대로 한 줄에 공백으로 구분해 출력합니다.
| 예제 입력 | 비교 결과 | 예제 출력 |
|---|---|---|
6 |
7은 항상 선택, 9·6·12는 각각 바로 앞 수보다 큼 | 7 9 6 12 |
풀이와 정답
풀이와 정답 보기 (클릭)
비교 기준은 지금까지 나온 최댓값이 아니라 현재 원소의 바로 앞 원소입니다. 예를 들어 9 다음에 5가 오면 5는 제외되지만, 그 다음 6은 5보다 크므로 선택됩니다.
첫 원소를 결과 배열에 먼저 넣은 다음 인덱스 1부터 끝까지 순회합니다. 현재 값이 numbers[index - 1]보다 클 때만 결과에 추가하면 입력 순서도 자연스럽게 유지됩니다.
알고리즘 설계

- 첫 번째 수를 결과 배열에 넣습니다.
- 두 번째 수부터 현재 값과 바로 앞 값을 비교합니다.
- 현재 값이 더 클 때만 결과 배열에 추가합니다.
- 선택된 값들을 공백으로 이어 출력합니다.
이 방식은 주어진 코드를 그대로 살리면서 온라인 저지의 Node.js 표준 입력 형식에 맞춘 풀이입니다. 배열을 정렬하면 원래의 인접 관계가 사라지므로 정렬하지 않습니다.
JavaScript 풀이

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까지 합 출력하기 풀이도 함께 살펴보실 수 있습니다.
풀이 전에 확인할 순서
- 입력값과 출력값을 한 문장으로 다시 적습니다.
- 반복할 대상과 비교·저장할 값을 정합니다.
- 필요한 자료구조와 시간복잡도를 예상합니다.
- 코드를 보기 전에 손으로 작은 예제를 계산합니다.
힌트: 큰 수 출력하기 JavaScript 풀이
정답 코드를 바로 따라 쓰기보다, 본문에서 값이 갱신되는 조건과 반복 범위를 먼저 찾으세요. 반복 한 번마다 반드시 유지되어야 하는 값이 무엇인지 적으면 풀이의 중심 변수를 고르기 쉽습니다.
테스트 확인
- 가능한 가장 작은 입력
- 같은 값이나 문자가 반복되는 입력
- 정답이 처음 또는 마지막 위치에서 결정되는 입력
- 입력 제한에 가까운 경우의 실행 시간
확인 결과: 본문의 예제뿐 아니라 위 경계 사례에서도 예상값과 실제 출력이 같아야 풀이가 완료됩니다.
이 글이 도움이 되었나요?
코딩테스트 JavaScript 학습 순서
필수 49개 · 전체 49개
읽음 기록 관리
전체 과정 목차 (49개)
- 필수 길잡이 · 코딩테스트 JS 자료구조 로드맵: 배열, 해시, 스택, 투 포인터 순서
- 필수 학습 · 세 수 중 최솟값 JavaScript 조건문 풀이 정리
- 필수 학습 · 삼각형 판별하기 JavaScript 풀이
- 필수 학습 · 연필 개수 JavaScript 풀이
- 필수 학습 · 1부터 N까지 합 출력하기 JavaScript 풀이
- 필수 학습 · 최솟값 구하기 JavaScript 풀이|배열 순회와 비교 갱신 원리
- 필수 학습 · 홀수 JavaScript 풀이: 조건 판별과 결과 처리 정리
- 필수 학습 · 10부제 JavaScript 풀이: 끝자리 비교로 위반 차량 수 세기
- 필수 학습 · A를 #으로 JavaScript 풀이: 문자열 순회와 치환
- 필수 학습 · 문자 찾기 JavaScript 풀이: 문자열 순회로 개수 세기
- 필수 학습 · 대문자 찾기 JavaScript 풀이
- 필수 학습 · 대문자로 통일 JavaScript 풀이
- 필수 학습 · 대소문자 변환 JavaScript 풀이
- 필수 학습 · 일곱 난쟁이 JavaScript 풀이: 두 명을 제외하는 완전탐색
- 필수 학습 · 코딩테스트 JS Map 풀이: 학급 회장 득표수 세기
- 필수 학습 · 코딩테스트 JS 스택 풀이: 올바른 괄호 검증하기
- 필수 학습 · 코딩테스트 JS 스택 풀이: 괄호문자 제거하기
- 필수 학습 · 코딩테스트 JS 스택 풀이: 크레인 인형뽑기 처리법
- 필수 학습 · 코딩테스트 JS 스택 풀이: 후위식 연산 계산하기
- 필수 학습 · 코딩테스트 JS 스택 풀이: 쇠막대기 레이저 절단 개수 세기
- 필수 학습 · 코딩테스트 JS 투 포인터 풀이: 두 정렬 배열 합치기
- 필수 학습 · 코딩테스트 JS 투 포인터 풀이: 공통 원소 추출하기
- 필수 학습 · 코딩테스트 JS 슬라이딩 윈도우 풀이: 최대 매출 구간 합 계산하기
- 필수 학습 · JavaScript 투 포인터: 합이 M인 연속 부분수열 개수
- 필수 학습 · 코딩테스트 JS 해시 풀이: 모든 아나그램 찾기
- 필수 학습 · 가장 긴 문자열 JavaScript 풀이
- 필수 학습 · 가운데 문자 출력 JavaScript 풀이
- 필수 학습 · 중복문자제거 JavaScript 풀이
- 필수 학습 · 코딩테스트 JS 고급: 최소 힙으로 다익스트라 최단 경로 구하기
- 필수 학습 · 코딩테스트 JS Union-Find: 연결 성분 수와 크기 구하기
- 필수 학습 · 코딩테스트 JS Trie: 접두사에 맞는 단어 수 세기
- 필수 학습 · 코딩테스트 JS Fenwick Tree: 값 갱신과 구간 합 처리
- 필수 학습 · 코딩테스트 JS 세그먼트 트리: 단일 대입과 구간 합
- 필수 학습 · 코딩테스트 JS LRU 캐시: 지도 타일 재사용 기록
- 필수 학습 · 코딩테스트 JS AVL 트리: 기준 이상 최솟값 찾기
- 필수 학습 · 코딩테스트 JS 큐: 상담 창구 대기열 명령 처리
- 필수 학습 · 코딩테스트 JS 연결 리스트: 재생 대기 목록 관리
- 필수 학습 · JavaScript 원형 덱 연습: 최근 기록 창과 되돌리기
- 필수 학습 · JavaScript 해시 테이블 연습: 정규화 문자열 빈도와 등장 순서
- 필수 학습 · JavaScript 트리 순회 연습: 깊이별 노드 묶기
- 필수 학습 · JavaScript BST 연습: 닫힌 구간의 중복 키 보고서
- 필수 학습 · JavaScript 최소 힙 연습: 동률 순서를 지키는 작업 스케줄러
- 필수 학습 · JavaScript 그래프 연습: 연결 구역 크기를 작은 순서로 출력하기
- 필수 학습 · 중복단어제거 JavaScript 풀이
- 필수 학습 · TypeScript 이진 탐색 연습: 숫자 카드 존재 여부 확인
- 필수 학습 · 큰 수 출력하기 JavaScript 풀이 현재 글
- 필수 학습 · 보이는 학생 JavaScript 풀이
- 필수 학습 · 가위바위보 JavaScript 풀이
- 필수 학습 · 점수계산 JavaScript 풀이
새 글 받아보기
RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.