TIL 2026-03-20
TIL 2026-03-20
3/20 -백준 코딩테스트 문제 풀이 정리
생성일: 2026년 3월 20일 오후 6:51
코딩테스트 문제 풀이 정리 (3/20)
BOJ 10818 | 최솟값과 최댓값
문제 요약
N개의 정수가 주어졌을 때, 최솟값과 최댓값을 출력한다.
풀이 과정
- 첫 번째 값을 읽어
minVal,maxVal둘 다 초기화 - 이후 값을 읽으면서 조건문으로 즉시 비교 → 배열 없이 O(1) 공간으로 해결
std::min/std::max함수 대신 직접 조건문 사용 → 함수 호출 오버헤드 제거
사용한 메서드 / 기법
| 항목 | 내용 |
|---|---|
ios::sync_with_stdio(false) | C와 C++ 스트림 동기화 해제로 입출력 속도 향상 |
cin.tie(nullptr) | cin과 cout 묶음 해제로 불필요한 flush 방지 |
| 단일 순회 (Single Pass) | 배열 저장 없이 입력과 동시에 min/max 갱신 |
복잡도
- 시간복잡도: O(N)
- 공간복잡도: O(1)
BOJ 10807 | 개수 세기
문제 요약
N개의 정수 중 특정 값 v가 몇 번 등장하는지 출력한다.
풀이 과정
- v가 입력의 마지막에 주어지므로, 먼저 배열에 저장한 뒤 비교 필요
- N ≤ 100으로 고정 크기가 작으므로
vector대신 스택 고정 배열int arr[100]사용 - 배열 저장 후 단일 순회로
arr[i] == v카운팅
사용한 메서드 / 기법
| 항목 | 내용 |
|---|---|
ios::sync_with_stdio(false) | 빠른 입출력 |
cin.tie(nullptr) | 불필요한 flush 방지 |
고정 크기 배열 int arr[100] | 힙 할당 없이 스택에서 처리, vector 대비 오버헤드 없음 |
| 선형 탐색 | 정렬 없이 O(N) 순회로 카운팅 |
복잡도
- 시간복잡도: O(N)
- 공간복잡도: O(N) (고정 크기 100이므로 사실상 O(1))
BOJ 5597 | 과제 안 내신 분..?
문제 요약
1~30 중 28개의 번호가 주어질 때, 제출하지 않은 2명의 번호를 오름차순으로 출력한다.
풀이 과정
bool submitted[31]배열을 체크박스처럼 활용- 입력받은 번호를
submitted[x] = true로 마킹 - 마킹 후 1~30 순서대로 순회하면서
false인 인덱스 출력 → 자동으로 오름차순 보장 (정렬 불필요)
사용한 메서드 / 기법
| 항목 | 내용 |
|---|---|
ios::sync_with_stdio(false) | 빠른 입출력 |
cin.tie(nullptr) | 불필요한 flush 방지 |
bool arr[31] = {} | 0(false)으로 일괄 초기화되는 C++ 값 초기화 |
| 인덱스 마킹 (Index Marking) | 해시처럼 번호를 인덱스로 직접 사용, 탐색 O(1) |
| 순차 탐색으로 정렬 대체 | 1~30 순서 순회로 별도 정렬 없이 오름차순 출력 |
복잡도
- 시간복잡도: O(1) (입력 28회 + 탐색 30회 = 상수)
- 공간복잡도: O(1) (고정 크기 31 배열)
💡 공통 핵심 기법 정리
| 기법 | 설명 | 적용 문제 |
|---|---|---|
ios::sync_with_stdio(false) • cin.tie(nullptr) | 대용량 입력 시 속도 개선 필수 | 전체 공통 |
| 고정 크기 배열 | N이 작고 고정일 때 vector 대신 사용, 힙 할당 오버헤드 없음 | 10807, 5597 |
| 인덱스 마킹 | 값을 인덱스로 직접 사용해 O(1) 접근 (해시 테이블 원리) | 5597 |
| 단일 순회 (Single Pass) | 배열 저장 없이 입력과 동시에 처리 | 10818 |
| 정렬 대신 순차 탐색 | 범위가 작고 고정일 때 정렬 없이 오름차순 보장 | 5597 |
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.