1. 자료구조 vs 알고리즘, 한 줄 정리
- 자료구조: 데이터를 효율적으로 저장·조직·접근하는 방식(배열, 리스트, 스택, 큐, 트리, 그래프, 해시 등).
- 알고리즘: 문제를 해결하기 위한 절차(정렬, 탐색, DFS/BFS, DP, 그리디, 완전탐색 등).
핵심 관계:
- 알고리즘은 “뭐로 풀지?” = 어떤 자료구조를 쓸지 선택.
- 자료구조는 “어떻게 저장할지?” = 알고리즘의 성능을 좌우.
→ 좋은 자료구조 선택 = 알고리즘 성능의 절반 (시간복잡도를 크게 줄여 줌).
2. 코테에서 쓰이는 “자료구조 × 알고리즘” 조합
코테 문제 유형별로 어떤 자료구조 + 알고리즘이 쓰이는지를 정리하면:
| 문제 유형 / 목표 | 어울리는 자료구조 | 대표 알고리즘 |
| 순서가 중요한 리스트, 반복 처리 | ArrayList, Array | 선형탐색, 버블/선택/삽입정렬, 이분탐색 |
| 괄호검사, 뒤로가기, 재귀 트리 탐색 | Stack | DFS, 백트래킹, 재귀 |
| 줄 서기, 레벨별 탐색 | Queue (BFS) | BFS, BFS 기반 최단거리 |
| 계층 구조, 부모-자식 관계, 데이터의 삽입&삭제 빈번 | Tree, Heap | 트리순회, 힙정렬, 힙 기반 최대/최소 관리 |
| 연결 관계, 경로 탐색 | Graph | DFS, BFS, 다익스트라, 플로이드 등 |
| 키-값 빠른 검색 | HashMap, HashSet | 해시 탐색, 방문 여부 체크, 카운트 등 |
해시 탐색, 방문 여부 체크, 카운트 등
→ 코테에서 가장 중요한 건 “이 문제는 어떤 구조를 떠올리면 풀리는가?”를 보는 안목
예:
“괄호 매칭, 뒤로가기” → Stack이 떠올라야 하고
“가장 비싼 것/저렴한 것”을 빠르게 뽑고 싶다 → Heap이 떠올라야 함.
3. 초반 단계에서 현실적인 공부 순서 (코테 기준)
1 단계 : 자바 문법 + 기본 자료구조 (1~3주)
목표: for, if, 메서드, 배열, ArrayList, Scanner/BufferedReader를 손에 익히기.
학습:
- 변수/출력/if/for/배열 직접 쳐보기 (너가 쓴 Hello 예제 계속 변형).
- ArrayList, Stack, Queue(LinkedList로 구현) 기본 메서드 직접 써보기.
코테 활용:
- 숫자/문자열 입력 → 배열/ArrayList에 저장 → for로 순회 → 출력 패턴을 익히기.
2단계 : 자료구조 개념 + 시간복잡도 (2~3주)
목표: “언제 어떤 자료구조를 쓰면 좋은지” 감각 갖기.
학습:
- 배열 vs 링크드리스트, Stack vs Queue, HashMap의 장단점.
- 시간복잡도 개념: O(1), O(log n), O(n), O(n²) 이해.
핵심:
- 조회 많으면 Array/ArrayList
- 삽입/삭제 많으면 LinkedList
- 키-값 빠른 탐색이면 HashMap
- 이런 식으로 “선택 이유”를 말할 수 있어야 함.
3단계 : 기초 알고리즘 구현 (2~3주)
목표: “이 알고리즘이 어떻게 동작하는지”를 직접 코드로 해보기.
학습:
- 선형탐색, 이분탐색 직접 구현.
- 버블정렬, 선택정렬, 삽입정렬 직접 구현.
- 재귀: 팩토리얼, 피보나치, 재귀로 for 동작 시뮬레이션.
- Stack/Queue 기반으로 DFS/BFS 직접 구현.
여기까지 하면 코테 레벨 0~1(기초 시뮬레이션, 탐색, 정렬) 정도는 스스로 풀 수 있는 수준이 됨.
4 단계: 유형별 알고리즘 + 코테 문제 (계속)
목표: 알고리즘 유형을 “문제 패턴”으로 보게 만들기.
유형:
- 구현/시뮬레이션 (문자열, 배열, 단순 시뮬레이션).
- 완전탐색/브루트포스 (중첩 for, 재귀).
- DFS/BFS, 그래프 기본.
- DP, 그리디, 이분탐색 등 중급.
공부 방법:
1. 문제 하나 읽고 → “이 문제는 어떤 자료구조를 쓰면 편한가?” 먼저 고민.
2. 그 자료구조로 아이디어 설계 → 코드로 구현.
3. 오답/실패 시 → 시간복잡도 계산, “왜 더 빠른 구조를 쓰지 못했는지” 분석.
4. 코테를 풀 때 “자료구조+알고리즘”을 쓰는 실전 패턴
예제(괄호검사, 이분탐색, 버블정렬 등)처럼, 코테 문제는 보통 이렇게 풀어간다:
입력 구조 파악
문자열인지? 숫자 배열인지? 그래프(인접 리스트/인접 행렬)인지?
→ 이걸 보고 자료구조를 먼저 정함.
핵심 알고리즘 선택
정렬 필요? → Arrays.sort() + 이분탐색 또는 직접 정렬.
탐색? → 선형탐색 (for), 이분탐색 (while+인덱스), 해시 (HashMap) 중 골라서.
탐색 범위? → DFS/재귀 or BFS/Queue 중 선택.
시간복잡도 체크
이중 for → O(n²)
while에서 반복마다 범위가 절반 → O(log n)
HashMap → O(1) 탐색
이런 식으로 “내 풀이가 문제 제한 시간에 맞는지”를 보는 연습이 매우 중요.
5. 내가 지금 당장 할 수 있는 “실전 루틴”
너가 쓴 공부 순서를 조금 더 구체적인 주간 루틴으로 바꾸면:
주 1~2:
자바 기초 문법 + for, if, 배열, ArrayList 문제 여러 개 직접 타이핑.
Scanner, BufferedReader로 숫자/문자열 입력 → 배열/ArrayList에 저장 → 출력까지 반복.
주 3~4:
Stack, Queue, HashMap 개념 + 예제 코드 직접 구현.
선형탐색, 이분탐색, 버블정렬 코드 직접 쓰고, tc 구조(반복 테스트케이스)로 감싸서 돌려보기.
주 5~:
프로그래머스(레벨 0~1)에서
“배열/문자열/구현” 타입 → for + if로 풀기
“스택/큐/힙/그래프” 타입 → Stack, Queue, PriorityQueue 직접 써보기
하루 1~2문제라도,
문제 → 어떤 자료구조를 쓸지 적고 → 코드 → 시간복잡도 계산
이렇게 세 단계로 풀기.
6. 추천 학습 자료 + 전략
정리:
위키독스 자료구조/알고리즘 기초 정리 (한국어, 무료).
코테 준비 구조화:
“코테 무조건 합격 7단계”처럼
① 언어/문법 → ② 자료구조 → ③ 알고리즘 → ④ 유형별 문제 → ⑤ 모의테스트 순서를 밟는 게 좋음.
실습 위주:
“JAVA로 구현하는 자료구조” 강의처럼 직접 Stack, Queue, Tree, HashMap을 구현해 보는 것도 좋지만,
코테 중심이면 JAVA 라이브러리(ArrayList, Stack, Queue, HashMap, PriorityQueue)를 잘 쓰는 연습이 우선.
7. 한 줄으로 정리한 공부 방향
“자바 기초 → 자료구조 감각(배열, 리스트, 스택, 큐, 해시) → 기초 알고리즘(탐색, 정렬, 재귀, DFS/BFS) → 프로그래머스 0~1 레벨 증명 문제 중심 반복” 순서로, 문제 하나당 ‘자료구조 선택 + 알고리즘 설계 + 시간복잡도 체크’ 세 단계를 꼭 적어가면서 풀어라