일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준온라인저지
- docker
- Pseudo Lab
- delete join
- Spark
- data_engineer
- BOT
- Airflow
- Python
- docker container
- hackerrank
- airflow architecture
- SQL
- 데이터 엔지니어
- Dynamic Programming
- 프로그래머스
- datacamp
- telegram
- dsf
- terraform
- 빅데이터를 지탱하는 기술
- leetcode
- docker image
- 알고리즘
- MySQL
- Data Engineering
- airflow webserver
- 그리디
- 2023년 목표
- 백준 온라인 저지
Archives
- Today
- Total
Lim Seunghyun Space
[프로그래머스] 체육복 본문
문제 정의
- 여벌의 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있음
- N번 학생은 N-1번, N+1번 학생의 체육복만 빌릴 수 있음
- 여벌의 체육복을 가지고 있는 학생이 도난을 당한 경우, 대여할 수 있는 체육복이 없음 -> 본인의 체육복을 이용
- 체육복을 이용할 수 있는 최대 학생 수를 구하는 문제
나의 풀이
# source : https://programmers.co.kr/learn/courses/30/lessons/42862
def solution(n, lost, reserve):
able_lst = [0 for _ in range(n)]
lost = sorted(lost)
reserve = sorted(reserve)
# 체육복을 가지고 있는 학생에 대한 값 변경
for i in range(n):
if i+1 not in lost:
able_lst[i] = 1
for lt in lost: # 도난당했지만 여유분이 있는 학생 처리
if lt in reserve:
reserve.remove(lt)
able_lst[lt-1] = 1
for lt in lost:
if lt - 1 in reserve: # 대여 가능한 범위에 대한 처리
able_lst[lt-1] = 1
reserve.remove(lt-1)
elif lt + 1 in reserve: # 대여 가능한 범위에 대한 처리
able_lst[lt-1] = 1
reserve.remove(lt+1)
return sum(able_lst)
- lost에 포함되면서 reserve에 포함된 학생을 먼저 처리해주었다.
- lost : [1,2] reserve : [2, 3] 인 경우, 2번 학생이 도난되었기 때문에 대여해줄 수 있는 여유분이 없기 때문에 없는 학생으로 처리해야 lost에 포함된 1번 학생이 2번 학생에게 체육복을 대여할 수 있는 케이스를 차단할 수 있다.
개선할 점
- N의 범위가 적어 시간 복잡도를 고려하지 않았지만 N의 범위가 커지는 경우를 대비하여 시간 복잡도를 고려하여 로직을 작성하도록 노력해야겠다.
- 코드를 좀 더 파이썬스럽게 작성하도록 노력해야겠다.
Github : https://github.com/Limseunghyun95/code_test/blob/master/programmers/p_42862.py
728x90
'Algorithm > 문제' 카테고리의 다른 글
[백준 온라인 저지] 01타일 (0) | 2021.11.11 |
---|---|
[백준 온라인 저지] 유기농 배추 (0) | 2021.11.10 |
[백준 온라인 저지] 근우의 다이어리 꾸미기 (0) | 2021.10.31 |
[백준 온라인 저지] 등수 매기기 (0) | 2021.10.26 |
[백준 온라인 저지] 뒤집기 (0) | 2021.10.26 |