소프트웨어 개발 연습문제¶
정답은 각 문제 아래 토글을 클릭하거나 페이지 하단에서 확인하세요.
알고리즘¶
Q1. 다음 중 안정 정렬(Stable Sort)에 해당하지 않는 것은?
- 버블 정렬
- 삽입 정렬
- 병합 정렬
- 퀵 정렬
Q2. 정렬된 배열 [1, 3, 5, 7, 9, 11]에서 값 9를 이진 탐색으로 찾을 때 비교 횟수는?
- 1회
- 2회
- 3회
- 4회
Q3. 다음 중 최악의 경우 시간복잡도가 O(n log n)인 정렬은?
- 퀵 정렬
- 버블 정렬
- 병합 정렬
- 선택 정렬
Q4. 다익스트라 알고리즘에 대한 설명으로 옳지 않은 것은?
- 단일 출발점 최단 경로를 구한다
- 음수 가중치 간선이 있는 경우에도 정상 동작한다
- 시간복잡도는 O(n²)이다
- 그리디 알고리즘 기반이다
자료구조¶
Q5. 스택(Stack)의 특성으로 옳은 것은?
- FIFO (First In First Out)
- LIFO (Last In First Out)
- 우선순위 기반 처리
- 양방향 삽입/삭제
Q6. 완전 이진 트리에서 노드가 15개일 때 트리의 높이는?
- 3
- 4
- 5
- 6
Q7. 해시 충돌 해결 방법 중 개방 주소법(Open Addressing)에 해당하지 않는 것은?
- 선형 탐사
- 제곱 탐사
- 이중 해싱
- 체이닝(Chaining)
소프트웨어 공학¶
Q8. 애자일 선언의 4가지 가치 중 옳지 않은 것은?
- 프로세스보다 개인과 상호작용
- 문서보다 동작하는 소프트웨어
- 계획을 따르기보다 변화에 대응
- 고객과의 협력보다 계약 협상
Q9. 스크럼에서 제품 백로그의 우선순위를 결정하고 관리하는 역할은?
- 스크럼 마스터
- 개발팀
- 제품 오너(PO)
- 아키텍트
Q10. 블랙박스 테스트 기법에 해당하지 않는 것은?
- 동등 분할
- 경계값 분석
- 기본 경로 테스트
- 결정 테이블
객체지향 프로그래밍¶
Q11. SOLID 원칙 중 "클래스는 확장에는 열려있고 변경에는 닫혀있어야 한다"는 것은?
- 단일 책임 원칙 (SRP)
- 개방-폐쇄 원칙 (OCP)
- 리스코프 치환 원칙 (LSP)
- 인터페이스 분리 원칙 (ISP)
Q12. 디자인 패턴 분류 중 싱글톤(Singleton), 팩토리 메서드(Factory Method)가 속하는 패턴 유형은?
- 구조 패턴
- 행동 패턴
- 생성 패턴
- 아키텍처 패턴
Q13. 다음 중 추상 클래스와 인터페이스에 대한 설명으로 옳은 것은?
- 인터페이스는 다중 상속이 불가능하다
- 추상 클래스는 인스턴스를 생성할 수 있다
- 인터페이스는 구현 메서드를 가질 수 없다 (Java 7 이하 기준)
- 추상 클래스는 상태(필드)를 가질 수 없다
Q14. 플로이드-워셜 알고리즘의 시간복잡도는?
- O(n)
- O(n log n)
- O(n²)
- O(n³)
Q15. 힙(Heap) 자료구조에서 최솟값을 O(1)에 조회할 수 있는 힙의 종류는?
- 최대 힙(Max Heap)
- 최소 힙(Min Heap)
- 이진 탐색 트리
- AVL 트리
Q16. 다음 중 O(1) 시간복잡도로 수행되는 연산이 아닌 것은?
- 배열의 인덱스 접근
- 해시 테이블 조회 (충돌 없는 경우)
- 연결 리스트 중간 삽입
- 스택의 push/pop
Q17. UML 다이어그램 중 시스템의 기능과 외부 사용자(Actor)의 관계를 나타내는 것은?
- 클래스 다이어그램
- 시퀀스 다이어그램
- 유스케이스 다이어그램
- 상태 다이어그램
Q18. 다음 중 행동 패턴(Behavioral Pattern)에 해당하는 디자인 패턴은?
- 싱글톤(Singleton)
- 어댑터(Adapter)
- 옵저버(Observer)
- 빌더(Builder)
Q19. 소프트웨어 테스트 중 수정 후 기존 기능이 정상적으로 동작하는지 확인하는 테스트는?
- 단위 테스트
- 통합 테스트
- 인수 테스트
- 회귀 테스트
Q20. 객체지향의 다형성(Polymorphism)에 대한 설명으로 옳은 것은?
- 클래스 내부 데이터를 외부에서 직접 접근하지 못하게 한다
- 같은 인터페이스로 다양한 객체를 다룰 수 있다
- 부모 클래스의 속성과 메서드를 자식 클래스가 이어받는다
- 구현 세부사항을 숨기고 핵심 개념만 표현한다
Q21. 다음 중 클래스 다이어그램의 합성(Composition) 관계에 대한 설명으로 옳은 것은?
- 부분 객체가 전체 객체와 독립적으로 존재할 수 있다
- 전체 객체가 삭제되면 부분 객체도 함께 삭제된다
- 약한 포함 관계이다
- 흰색 마름모로 표현된다
Q22. 다음 중 그래프에서 사이클(Cycle)이 없는 연결 그래프는?
- 완전 그래프
- 방향 그래프
- 트리
- 가중치 그래프
Q23. 퀵 정렬에서 최악의 경우가 발생하는 조건은?
- 배열이 완전히 무작위일 때
- 이미 정렬된 배열에서 맨 끝 요소를 피벗으로 선택할 때
- 배열의 중간 요소를 피벗으로 선택할 때
- 배열의 크기가 홀수일 때
Q24. 소프트웨어 개발 방법론 중 요구사항이 자주 변경되는 프로젝트에 가장 적합한 것은?
- 폭포수 모델
- 나선형 모델
- 애자일(스크럼)
- V 모델
Q25. 다음 코드 커버리지 중 가장 강한 기준은?
- 구문(Statement) 커버리지
- 결정(Decision) 커버리지
- 조건(Condition) 커버리지
- MC/DC 커버리지
복합 문제¶
Q26. 다음 상황에서 가장 적합한 자료구조와 알고리즘의 조합은?
웹 브라우저의 "뒤로 가기" 기능을 구현하려 한다. 최근 방문한 페이지로 돌아가야 하며, 방문 기록은 순서대로 쌓인다.
- 큐 + BFS
- 스택 + DFS
- 힙 + 다익스트라
- 해시 테이블 + 이진 탐색
Q27. 다음 설명에서 위반된 SOLID 원칙과 적용해야 할 디자인 패턴을 바르게 연결한 것은?
결제 시스템에서 신용카드, 카카오페이, 토스 결제 방식을 모두 하나의 클래스에서 if-else로 처리하고 있다. 새 결제 수단 추가 시마다 이 클래스를 수정해야 한다.
- SRP 위반 — 싱글톤 패턴
- OCP 위반 — 전략(Strategy) 패턴
- LSP 위반 — 옵저버(Observer) 패턴
- ISP 위반 — 팩토리(Factory) 패턴
Q28. DFS와 BFS를 비교한 설명으로 옳은 것은?
- DFS는 큐를 사용하고, BFS는 스택을 사용한다
- BFS는 최단 경로 탐색에 적합하고, DFS는 스택(재귀)을 사용한다
- DFS는 항상 BFS보다 빠르다
- BFS는 메모리를 적게 사용한다
Q29. 다음 중 소프트웨어 테스트와 개발 방법론의 관계로 옳은 것은?
- 폭포수 모델에서는 테스트를 개발과 동시에 수행한다
- TDD(테스트 주도 개발)는 코드 작성 후 테스트를 작성한다
- 애자일에서는 스프린트마다 테스트를 수행한다
- 인수 테스트는 개발자가 단독으로 수행한다
Q30. 다음 조건을 모두 만족하는 자료구조는?
- 삽입/삭제: O(log n)
- 최댓값 또는 최솟값 조회: O(1)
- 완전 이진 트리 기반
- 이진 탐색 트리(BST)
- AVL 트리
- 힙(Heap)
- 해시 테이블
정답¶
| 번호 | 정답 | 해설 |
|---|---|---|
| Q1 | 4 | 퀵 정렬은 불안정 정렬 (버블·삽입·병합은 안정 정렬) |
| Q2 | 2 | 중간값 5 → 9>5 오른쪽 → 중간값 9 → 일치 (2회) |
| Q3 | 3 | 병합 정렬은 항상 O(n log n) / 퀵 정렬 최악은 O(n²) |
| Q4 | 2 | 다익스트라는 음수 가중치 처리 불가 (벨만-포드가 가능) |
| Q5 | 2 | 스택은 LIFO (큐는 FIFO) |
| Q6 | 2 | 높이 h의 완전 이진 트리 최대 노드 = 2^(h+1)-1. h=3이면 15개 → 높이 3, 레벨 수 4 |
| Q7 | 4 | 체이닝은 분리 연결법으로 개방 주소법과 다른 방식 |
| Q8 | 4 | "계약 협상보다 고객과의 협력" 이 맞는 표현 |
| Q9 | 3 | 제품 백로그 관리는 PO의 역할 |
| Q10 | 3 | 기본 경로 테스트는 화이트박스 테스트 기법 |
| Q11 | 2 | OCP(Open-Closed Principle): 확장에 열림, 변경에 닫힘 |
| Q12 | 3 | 싱글톤·팩토리·빌더·프로토타입·추상팩토리 → 생성 패턴 |
| Q13 | 3 | Java 7 이하 인터페이스는 추상 메서드만 가능 (Java 8부터 default 메서드 허용) |
| Q14 | 4 | 플로이드-워셜: 모든 쌍 최단경로 → O(n³) |
| Q15 | 2 | 최소 힙: 루트가 항상 최솟값 → O(1) 조회 |
| Q16 | 3 | 연결 리스트 중간 삽입: 탐색 O(n) + 삽입 O(1) = 전체 O(n) |
| Q17 | 3 | 유스케이스 다이어그램: 사용자(Actor)와 기능(UseCase) 관계 |
| Q18 | 3 | 옵저버는 행동 패턴 / 싱글톤=생성 / 어댑터=구조 / 빌더=생성 |
| Q19 | 4 | 회귀 테스트: 변경 후 기존 기능 정상 동작 확인 |
| Q20 | 2 | 다형성: 같은 인터페이스로 다른 객체 처리 |
| Q21 | 2 | 합성(Composition): 강한 포함 — 전체 삭제 시 부분도 삭제 |
| Q22 | 3 | 트리 = 사이클 없는 연결 그래프, 노드 n개, 간선 n-1개 |
| Q23 | 2 | 이미 정렬된 배열 + 맨 끝 피벗 → 매번 n-1개 비교 → O(n²) |
| Q24 | 3 | 애자일: 변화 대응에 최적화 / 폭포수: 요구사항 고정 시 적합 |
| Q25 | 4 | MC/DC: 항공·의료 분야 최고 강도 기준 |
| Q26 | 2 | 뒤로 가기 = LIFO → 스택 / 탐색 방식은 DFS |
| Q27 | 2 | OCP 위반: 새 기능 추가 시 기존 코드 수정 필요 → 전략 패턴으로 해결 |
| Q28 | 2 | BFS=큐+최단경로, DFS=스택(재귀) |
| Q29 | 3 | 애자일: 각 스프린트마다 테스트 포함 (TDD는 코드 전에 테스트 작성) |
| Q30 | 3 | 힙: 삽입/삭제 O(log n), 최대/최소 O(1), 완전 이진 트리 |