Better Code, Better Life

체육복 - 프로그래머스 - 파이썬 풀이 본문

Coding Test/Programmers

체육복 - 프로그래머스 - 파이썬 풀이

심재훈 2019. 10. 11. 11:45

문제 풀이

  1. 먼저 여벌 체육복을 가져온 학생이 체육복을 도난당한 경우를 해결해줍니다. 이는 lost, reserve 사이에서 중복을 제거하면 됩니다.

    filter_duplicate

  2. 여벌 체육복을 가져온 학생들의 번호를 가지고 잃어버린 학생들에게 왼쪽번호부터 차례대로 빌려줍니다.

    lend_clothes_from_nearby_student

  3. 전체 학생 수에서 여전히 못빌린 학생 수를 빼면 정답이 나옵니다.

클린 코드 작성법

  1. 임의의 두개의 리스트에 대해서 행하는 로직의 경우 list1, list2 처럼 변수명을 지어도 괜찮습니다.

  2. for문 내에서 복잡한 로직을 행하게 된다면, 이 부분을 따로 함수를 통해 for문 중첩 수를 줄이는 것이 좋습니다.

    lend_clothes_from_nearby_student

해답 코드

def solution(n, lost, reserve):
    reserve_students = filter_duplicate(reserve, lost)
    lost_students = filter_duplicate(lost, reserve)
    for student_num in reserve_students:
        lost_students = lend_clothes_from_nearby_student(student_num, lost_students)
    answer = n - len(lost_students)
    return answer

def filter_duplicate(list1, list2):
    result = []
    for element in list1:
        if element not in list2:
            result.append(element)
    return result

def lend_clothes_from_nearby_student(student_num, lost_students):
    left_student_num = student_num - 1
    right_student_num = student_num + 1
    if left_student_num in lost_students:
        lost_students.remove(left_student_num)
    elif right_student_num in lost_students:
        lost_students.remove(right_student_num)
    return lost_students

 

도움이 됐다면 공감버튼을 눌러주세요! 질문이 있다면 댓글 달아주세요!

문제 링크

 

코딩테스트 연습 - 체육복 | 프로그래머스

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체

programmers.co.kr

 

Comments