포스트

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 라이센스를 따릅니다.