배열에서 첫 번째 반복 요소 (C++)

발행: (2026년 1월 14일 오전 02:06 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

왜 처음 접근 방식이 틀렸는가 — 그리고 어떻게 고쳤는가

문제 명확화 (매우 중요)

작업은 모든 반복 요소 중에서 첫 번째 등장 인덱스가 가장 작은 요소를 찾는 것입니다. 이는 다음이 아닙니다:

  • 가장 작은 값
  • 단순히 중복된 어떤 요소든

순서가 중요합니다.

초기 완전 탐색 접근법 (잘못된 논리)

vector v = {1, 2, 3, 4, 1, 2};
int t = INT_MAX;

for (int i = 0; i = j) {
    t = v[j];   // ❌ wrong comparison & assignment
}

cout = j는 값과 인덱스를 혼합하여 잘못된 결과를 초래합니다.

수정된 완전 탐색 솔루션 (인덱스 기반 사고)

문제를 다시 생각해 보면, 목표는 반복 요소의 가장 작은 인덱스를 추적하는 것이며, 값 자체가 아닙니다.

vector v = {1, 2, 3, 4, 1, 2};
int t = INT_MAX;

for (int i = 0; i  i) {
    t = i;   // ✅ store first occurrence index
}
vector v = {4, 5, 6, 7, 5, 4, 7};
vector freq(100, 0);
int t = INT_MAX;

for (int x : v) {
    if (freq[x] > 0) {
        t = x;
        break;
    }
    freq[x]++;
}

cout << t;

복잡도

  • 시간: O(n)
  • 공간: O(k) 여기서 k는 가능한 값의 범위(여기서는 100)입니다.

직접 해보기 (unordered_map 사용)

어떤 솔루션을 보기 전에, std::unordered_map을 사용해 첫 번째 발생을 추적하여 문제를 해결해 보세요.

핵심 학습 (가장 중요)

실수는 구문 오류가 아니라 문제 진술을 오해한 것이었습니다.

  • 작업의 맥락에서 “첫 번째”가 무엇을 의미하는지 항상 명확히 하세요.
  • 순서를 포함하는 문제에서는 인덱스 기반 사고가 필수적입니다.

최종 정리

초기 솔루션은 비록 틀렸지만, 요구 사항을 올바르게 해석하는 것이 얼마나 중요한지 강조하는 데 도움이 되었습니다. 자신의 논리를 고치는 것은 문제 해결 능력을 향상시키는 가장 강력한 방법 중 하나입니다.

Back to Blog

관련 글

더 보기 »

C++에서 K번째 큰 원소

🧩 문제 설명 배열과 정수 k가 주어졌을 때, k‑th largest element를 찾으세요. 예시 - 입력: 3, 2, 1, 5, 6, 4, k = 2 - 출력: 5 🧠 첫 번째 생각: ...