👤 응시자 정보
각각의 코드를 읽고 바로 아래 문제를 푸세요. 채점 후 학번_이름_정렬_득점_응시시각.txt 파일이 생성됩니다.
결과 다운로드
📘 평가 구성
| 항목 | 내용 |
|---|---|
| 예제 코드 | 총 15개 코드 제시 |
| 문항 수 | 각 코드당 2문항, 전체 30문항 |
| 문항 유형 | 개념확인 OX 1개 + 코드 활용 5지선다형 1개 |
| 결과 파일 | 학번_이름_정렬_득점_응시시각.txt |
1. 숫자 리스트 오름차순·내림차순 정렬
코드
class NumberSorter:
def __init__(self, numbers):
self.numbers = numbers
def ascending(self):
return sorted(self.numbers)
def descending(self):
return sorted(self.numbers, reverse=True)
sorter = NumberSorter([8, 3, 1, 9, 5])
print("오름차순:", sorter.ascending())
print("내림차순:", sorter.descending())
sorted()는 원본 리스트를 직접 바꾸지 않고 정렬된 새 리스트를 반환한다.
NumberSorter([8, 3, 1, 9, 5]).ascending()의 결과는?
2. 문자열 알파벳순 정렬
코드
class WordAlphabetSorter:
def __init__(self, words):
self.words = words
def sort_words(self):
return sorted(self.words)
def reverse_words(self):
return sorted(self.words, reverse=True)
words = WordAlphabetSorter(["banana", "apple", "cherry", "date"])
print(words.sort_words())
print(words.reverse_words())
문자열 리스트도 sorted()로 사전식 순서 정렬이 가능하다.
['banana', 'apple', 'cherry', 'date']를 sorted()하면 첫 번째 단어는?
3. 순차 탐색으로 값 찾기
코드
class LinearSearch:
def __init__(self, data):
self.data = data
def find(self, target):
for index, value in enumerate(self.data):
if value == target:
return index
return -1
searcher = LinearSearch([10, 20, 30, 40, 50])
print(searcher.find(30))
print(searcher.find(99))
순차 탐색은 데이터가 반드시 정렬되어 있어야만 사용할 수 있다.
LinearSearch([10,20,30,40,50]).find(99)의 결과는?
4. 최댓값과 최솟값 찾기
코드
class MinMaxFinder:
def __init__(self, numbers):
self.numbers = numbers
def minimum(self):
return min(self.numbers)
def maximum(self):
return max(self.numbers)
finder = MinMaxFinder([42, 17, 88, 23, 65])
print("최솟값:", finder.minimum())
print("최댓값:", finder.maximum())
max()는 리스트에서 가장 큰 값을 찾는 데 사용할 수 있다.
MinMaxFinder([42,17,88,23,65]).minimum()의 결과는?
5. 문자열 길이 기준 정렬
코드
class WordLengthSorter:
def __init__(self, words):
self.words = words
def sort_by_length(self):
return sorted(self.words, key=len)
def longest(self):
return max(self.words, key=len)
words = WordLengthSorter(["AI", "Python", "Data", "Algorithm"])
print(words.sort_by_length())
print("가장 긴 단어:", words.longest())
sorted(words, key=len)은 문자열 길이를 기준으로 정렬한다.
['AI','Python','Data','Algorithm']에서 max(words, key=len)의 결과는?
6. 학생 점수 기준 순위 정렬
코드
class StudentRanker:
def __init__(self, students):
self.students = students
def rank(self):
return sorted(self.students, key=lambda x: x["점수"], reverse=True)
def top_student(self):
return self.rank()[0]
students = [
{"이름": "김민수", "점수": 88},
{"이름": "이지은", "점수": 95},
{"이름": "박서준", "점수": 76}
]
ranker = StudentRanker(students)
print(ranker.rank())
print("1등:", ranker.top_student())
lambda x: x['점수']는 학생 딕셔너리에서 점수 값을 정렬 기준으로 꺼낸다.
학생 점수 88, 95, 76을 reverse=True로 정렬하면 1등은?
7. 이진 탐색으로 빠르게 찾기
코드
class BinarySearch:
def __init__(self, sorted_data):
self.data = sorted_data
def find(self, target):
left = 0
right = len(self.data) - 1
while left <= right:
mid = (left + right) // 2
if self.data[mid] == target:
return mid
elif self.data[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
searcher = BinarySearch([1, 3, 5, 7, 9, 11, 13])
print(searcher.find(9))
print(searcher.find(4))
이진 탐색은 정렬된 데이터에서 탐색 범위를 절반씩 줄이는 방식이다.
BinarySearch([1,3,5,7,9,11,13]).find(9)의 반환값은?
8. 상품 가격 정렬과 최저가 탐색
코드
class ProductAnalyzer:
def __init__(self, products):
self.products = products
def sort_by_price(self):
return sorted(self.products, key=lambda x: x["가격"])
def cheapest(self):
return self.sort_by_price()[0]
products = [
{"상품": "노트북", "가격": 1200000},
{"상품": "마우스", "가격": 25000},
{"상품": "키보드", "가격": 70000}
]
analyzer = ProductAnalyzer(products)
print(analyzer.sort_by_price())
print("최저가 상품:", analyzer.cheapest())
딕셔너리 리스트는 lambda를 이용해 특정 키 값 기준으로 정렬할 수 있다.
노트북 1200000, 마우스 25000, 키보드 70000 중 cheapest() 결과는?
9. 키워드 포함 도서 검색
코드
class BookSearch:
def __init__(self, books):
self.books = books
def search_keyword(self, keyword):
return [book for book in self.books if keyword in book["제목"]]
def sort_by_year(self):
return sorted(self.books, key=lambda x: x["연도"])
books = [
{"제목": "파이썬 알고리즘", "연도": 2021},
{"제목": "자료구조 입문", "연도": 2019},
{"제목": "알고리즘 심화", "연도": 2023}
]
library = BookSearch(books)
print(library.search_keyword("알고리즘"))
print(library.sort_by_year())
keyword in book['제목']은 제목 안에 특정 키워드가 포함되는지 검사한다.
search_keyword('알고리즘') 결과에 포함되는 책은 몇 권인가?
10. 중복 제거 후 정렬
코드
class UniqueSorter:
def __init__(self, data):
self.data = data
def unique_sorted(self):
return sorted(set(self.data))
def count_unique(self):
return len(set(self.data))
numbers = UniqueSorter([3, 1, 2, 3, 2, 5, 1, 4])
print(numbers.unique_sorted())
print("고유값 개수:", numbers.count_unique())
set()은 리스트의 중복 값을 제거하는 데 사용할 수 있다.
[3,1,2,3,2,5,1,4]의 unique_sorted() 결과는?
11. 택배 배송 우선순위 정렬
코드
class DeliveryScheduler:
def __init__(self, orders):
self.orders = orders
def sort_by_priority(self):
return sorted(
self.orders,
key=lambda x: (x["긴급도"], x["거리"]),
reverse=False
)
def next_delivery(self):
return self.sort_by_priority()[0]
orders = [
{"주문번호": "A01", "긴급도": 2, "거리": 5},
{"주문번호": "B02", "긴급도": 1, "거리": 8},
{"주문번호": "C03", "긴급도": 1, "거리": 3}
]
scheduler = DeliveryScheduler(orders)
print(scheduler.sort_by_priority())
print("다음 배송:", scheduler.next_delivery())
튜플을 정렬 기준으로 사용하면 1차 기준, 2차 기준을 함께 적용할 수 있다.
긴급도와 거리를 기준으로 다음 배송 주문번호는?
12. 병원 환자 대기열 정렬
코드
class PatientQueue:
def __init__(self, patients):
self.patients = patients
def sort_by_severity(self):
return sorted(
self.patients,
key=lambda x: (-x["위급도"], x["도착순서"])
)
def next_patient(self):
return self.sort_by_severity()[0]
patients = [
{"이름": "환자A", "위급도": 3, "도착순서": 1},
{"이름": "환자B", "위급도": 5, "도착순서": 2},
{"이름": "환자C", "위급도": 5, "도착순서": 1}
]
queue = PatientQueue(patients)
print(queue.sort_by_severity())
print("다음 진료:", queue.next_patient())
-x['위급도']를 정렬 기준에 쓰면 위급도가 높은 환자를 먼저 정렬할 수 있다.
환자B와 환자C의 위급도가 같을 때 먼저 진료되는 환자는?
13. 검색 엔진 결과 정렬
코드
class SearchEngine:
def __init__(self, pages):
self.pages = pages
def search(self, keyword):
result = []
for page in self.pages:
if keyword in page["제목"] or keyword in page["내용"]:
result.append(page)
return sorted(result, key=lambda x: x["점수"], reverse=True)
pages = [
{"제목": "파이썬 기초", "내용": "정렬과 탐색 설명", "점수": 80},
{"제목": "알고리즘 심화", "내용": "이진 탐색과 정렬", "점수": 95},
{"제목": "웹 디자인", "내용": "HTML CSS", "점수": 70}
]
engine = SearchEngine(pages)
print(engine.search("탐색"))
검색 결과를 관련도 점수 기준으로 내림차순 정렬할 수 있다.
engine.search('탐색')에서 가장 먼저 나오는 문서 제목은?
14. 성적 데이터에서 등급별 탐색과 정렬
코드
class GradeAnalyzer:
def __init__(self, students):
self.students = students
def add_grade(self):
for student in self.students:
score = student["점수"]
if score >= 90:
student["등급"] = "A"
elif score >= 80:
student["등급"] = "B"
else:
student["등급"] = "C"
return self.students
def search_grade(self, grade):
return [s for s in self.students if s.get("등급") == grade]
def sort_by_score(self):
return sorted(self.students, key=lambda x: x["점수"], reverse=True)
students = [
{"이름": "김", "점수": 95},
{"이름": "이", "점수": 84},
{"이름": "박", "점수": 76},
{"이름": "최", "점수": 91}
]
analyzer = GradeAnalyzer(students)
analyzer.add_grade()
print("A등급:", analyzer.search_grade("A"))
print("점수순:", analyzer.sort_by_score())
search_grade('A')는 등급이 A인 학생만 찾아 반환한다.
점수 95, 84, 76, 91에서 A등급 학생은 몇 명인가?
15. 로그 데이터 오류 탐색과 시간 정렬
코드
class LogAnalyzer:
def __init__(self, logs):
self.logs = logs
def search_error(self):
return [log for log in self.logs if log["상태"] == "ERROR"]
def sort_by_time(self):
return sorted(self.logs, key=lambda x: x["시간"])
def latest_error(self):
errors = self.search_error()
if not errors:
return None
return sorted(errors, key=lambda x: x["시간"], reverse=True)[0]
logs = [
{"시간": "09:10", "상태": "OK", "메시지": "start"},
{"시간": "09:15", "상태": "ERROR", "메시지": "file missing"},
{"시간": "09:12", "상태": "OK", "메시지": "load"},
{"시간": "09:20", "상태": "ERROR", "메시지": "timeout"}
]
analyzer = LogAnalyzer(logs)
print("오류 로그:", analyzer.search_error())
print("시간순:", analyzer.sort_by_time())
print("최근 오류:", analyzer.latest_error())