Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스택/큐
- 부등호
- 중첩
- 프로그래머스
- boolean
- enumerate
- 중첩문
- 탈출 조건
- 가이드
- ZIP
- 그리디
- 2020 채용
- 코딩테스트
- 힙
- John Sonmez
- 조합
- 함수화
- deque
- min heap
- 임시 변수
- max-heap
- 대소 비교
- 가독성
- permutations
- 파이썬
- 변수명
- 커리어
- 매직 넘버
- 함수
- 중간 변수
Archives
- Today
- Total
Better Code, Better Life
체육복 - 프로그래머스 - 파이썬 풀이 본문
문제 풀이
-
먼저 여벌 체육복을 가져온 학생이 체육복을 도난당한 경우를 해결해줍니다. 이는 lost, reserve 사이에서 중복을 제거하면 됩니다.
filter_duplicate
-
여벌 체육복을 가져온 학생들의 번호를 가지고 잃어버린 학생들에게 왼쪽번호부터 차례대로 빌려줍니다.
lend_clothes_from_nearby_student
-
전체 학생 수에서 여전히 못빌린 학생 수를 빼면 정답이 나옵니다.
클린 코드 작성법
-
임의의 두개의 리스트에 대해서 행하는 로직의 경우 list1, list2 처럼 변수명을 지어도 괜찮습니다.
-
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
도움이 됐다면 공감버튼을 눌러주세요! 질문이 있다면 댓글 달아주세요!
'Coding Test > Programmers' 카테고리의 다른 글
조이스틱 - 프로그래머스 - 파이썬 풀이 (0) | 2020.08.05 |
---|---|
큰 수 만들기 - 프로그래머스 - 파이썬 풀이 (0) | 2019.10.13 |
카펫 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.26 |
숫자 야구 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.22 |
소수 찾기 - 프로그래머스 - 파이썬 풀이 (2) | 2019.08.19 |
Comments