Practice 9 : OOP

OOP(Object-Oriented-Programming)

Pair Matching Program

페어 프로그래밍은 하나의 컴퓨터에서 두 사람의 프로그래머가 작업하는 방식을 의미한다.

SSAFY 1학기 정규 과정에서 프로젝트는 페어 프로그래밍을 통해 진행한다. 진정한 프로그래머가 되기 위해 김싸피는 페어를 매칭하기 위한 프로그램을 작성하려고 한다. 클래스를 활용해 작성하며 포함되는 메서드는 아래와 같다.

구성 요소

  1. 초기화 메서드는 인자로 학생 이름으로 구성된 리스트를 받아서 인스턴스 변수에 할당한다.

  2. pick(n) 메서드는 학생들 명단에서 인자 n명 만큼 랜덤으로 추출하여 return한다.

  3. match_pair() 메서드는 학생들 명단을 랜덤으로 2명씩 매칭해 준다. 이때, 학생들 명단의 수가 홀수명이면 단 한팀만 3명으로 구성한다.


예시)

ch = ClassHelper(['김싸피', '이싸피', '조싸피', '박싸피', '정싸피'])

ch.pick(1) #=> ['이싸피']
ch.pick(1) #=> ['김싸피']
ch.pick(2) #=> ['김싸피', '박싸피']
ch.pick(3) #=> ['김싸피', '조싸피', '정싸피']
ch.pick(4) #=> ['박싸피', '이싸피', '김싸피', '정싸피']

ch.match_pair() #=> [['조싸피', '이싸피'], ['김싸피', '정싸피', '박싸피']]
import random

class ClassHelper:
    
    def __init__(self, students):
        self.students = students

    def pick(self, n):
        return random.sample(self.students, n)
    
    def match_pair(self):
        def pair_split(students):
            shuffled_students = students[:]
            random.shuffle(shuffled_students)
            result = [shuffled_students[i:i+2] for i in range(0, len(shuffled_students), 2)]
            if len(result) % 2:
                result[-2].append(result.pop()[0])
                return result
            return result
        return pair_split(self.students)
# 해당 코드를 통해 올바른 결과가 나오는지 확인하시오.
ch = ClassHelper(['김싸피', '이싸피', '조싸피', '박싸피', '정싸피'])
print(ch.pick(1)) #=> ['이싸피']
print(ch.pick(1)) #=> ['김싸피']
print(ch.pick(2)) #=> ['김싸피', '박싸피']
print(ch.pick(3)) #=> ['김싸피', '조싸피', '정싸피']
print(ch.pick(4)) #=> ['박싸피', '이싸피', '김싸피', '정싸피']

ch.match_pair() #=> [['조싸피', '이싸피'], ['김싸피', '정싸피', '박싸피']]
['박싸피']
['정싸피']
['이싸피', '박싸피']
['김싸피', '이싸피', '박싸피']
['이싸피', '이싸피', '박싸피', '정싸피']
[['조싸피', '이싸피'], ['김싸피', '정싸피', '박싸피']]