🔎 전북과학고등학교 정보 수업 정렬과 탐색 수행 평가

2026학년도 1학기 알고리즘과 프로그래밍 수행평가 입니다.

👤 응시자 정보

각각의 코드를 읽고 바로 아래 문제를 푸세요. 채점 후 학번_이름_정렬_득점_응시시각.txt 파일이 생성됩니다.


📘 평가 구성

항목내용
예제 코드총 15개 코드 제시
문항 수각 코드당 2문항, 전체 30문항
문항 유형개념확인 OX 1개 + 코드 활용 5지선다형 1개
결과 파일학번_이름_정렬_득점_응시시각.txt
예제 1정렬과 탐색 OOP

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())
문항 1 OX

sorted()는 원본 리스트를 직접 바꾸지 않고 정렬된 새 리스트를 반환한다.

문항 2 코드 활용 5지선다형

NumberSorter([8, 3, 1, 9, 5]).ascending()의 결과는?

예제 2정렬과 탐색 OOP

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())
문항 3 OX

문자열 리스트도 sorted()로 사전식 순서 정렬이 가능하다.

문항 4 코드 활용 5지선다형

['banana', 'apple', 'cherry', 'date']를 sorted()하면 첫 번째 단어는?

예제 3정렬과 탐색 OOP

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))
문항 5 OX

순차 탐색은 데이터가 반드시 정렬되어 있어야만 사용할 수 있다.

문항 6 코드 활용 5지선다형

LinearSearch([10,20,30,40,50]).find(99)의 결과는?

예제 4정렬과 탐색 OOP

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())
문항 7 OX

max()는 리스트에서 가장 큰 값을 찾는 데 사용할 수 있다.

문항 8 코드 활용 5지선다형

MinMaxFinder([42,17,88,23,65]).minimum()의 결과는?

예제 5정렬과 탐색 OOP

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())
문항 9 OX

sorted(words, key=len)은 문자열 길이를 기준으로 정렬한다.

문항 10 코드 활용 5지선다형

['AI','Python','Data','Algorithm']에서 max(words, key=len)의 결과는?

예제 6정렬과 탐색 OOP

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())
문항 11 OX

lambda x: x['점수']는 학생 딕셔너리에서 점수 값을 정렬 기준으로 꺼낸다.

문항 12 코드 활용 5지선다형

학생 점수 88, 95, 76을 reverse=True로 정렬하면 1등은?

예제 7정렬과 탐색 OOP

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))
문항 13 OX

이진 탐색은 정렬된 데이터에서 탐색 범위를 절반씩 줄이는 방식이다.

문항 14 코드 활용 5지선다형

BinarySearch([1,3,5,7,9,11,13]).find(9)의 반환값은?

예제 8정렬과 탐색 OOP

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())
문항 15 OX

딕셔너리 리스트는 lambda를 이용해 특정 키 값 기준으로 정렬할 수 있다.

문항 16 코드 활용 5지선다형

노트북 1200000, 마우스 25000, 키보드 70000 중 cheapest() 결과는?

예제 9정렬과 탐색 OOP

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())
문항 17 OX

keyword in book['제목']은 제목 안에 특정 키워드가 포함되는지 검사한다.

문항 18 코드 활용 5지선다형

search_keyword('알고리즘') 결과에 포함되는 책은 몇 권인가?

예제 10정렬과 탐색 OOP

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())
문항 19 OX

set()은 리스트의 중복 값을 제거하는 데 사용할 수 있다.

문항 20 코드 활용 5지선다형

[3,1,2,3,2,5,1,4]의 unique_sorted() 결과는?

예제 11정렬과 탐색 OOP

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())
문항 21 OX

튜플을 정렬 기준으로 사용하면 1차 기준, 2차 기준을 함께 적용할 수 있다.

문항 22 코드 활용 5지선다형

긴급도와 거리를 기준으로 다음 배송 주문번호는?

예제 12정렬과 탐색 OOP

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())
문항 23 OX

-x['위급도']를 정렬 기준에 쓰면 위급도가 높은 환자를 먼저 정렬할 수 있다.

문항 24 코드 활용 5지선다형

환자B와 환자C의 위급도가 같을 때 먼저 진료되는 환자는?

예제 13정렬과 탐색 OOP

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("탐색"))
문항 25 OX

검색 결과를 관련도 점수 기준으로 내림차순 정렬할 수 있다.

문항 26 코드 활용 5지선다형

engine.search('탐색')에서 가장 먼저 나오는 문서 제목은?

예제 14정렬과 탐색 OOP

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())
문항 27 OX

search_grade('A')는 등급이 A인 학생만 찾아 반환한다.

문항 28 코드 활용 5지선다형

점수 95, 84, 76, 91에서 A등급 학생은 몇 명인가?

예제 15정렬과 탐색 OOP

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())
문항 29 OX

latest_error()는 ERROR 로그 중 가장 시간이 늦은 로그를 반환한다.

문항 30 코드 활용 5지선다형

가장 최근 오류 메시지는?