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 |
Tags
- 파이썬 3
- 단계별문제풀이
- 백준
- python3
- 그래프이론
- 프로그래머스
- 최단경로
- ODQA
- 기술면접
- 그리디
- 백트랙킹
- Level1
- dfs
- 부스트캠프_AITech_3기
- Level2
- 개인회고
- 알고리즘_스터디
- 다시보기
- 구현
- 이코테
- 부스트캠프_AITech3기
- 이진탐색
- 정렬
- mrc
- dp
- U_stage
- 다이나믹프로그래밍
- 알고리즘스터디
- 주간회고
- Level2_PStage
Archives
- Today
- Total
국문과 유목민
4. 체육복 본문
0. 문제
링크) https://programmers.co.kr/learn/courses/30/lessons/42862
1. 알고리즘 계획
- 모든 학생이 체육복을 가지고 있다고 가정하고 배열 생성
- 체육복을 잃어버린 학생들의 번호를 찾아 체육복(값)을 뺀다
- 체육복이 없는 학생의 경우 앞, 뒤를 확인해 체육복(값)을 전달받는다
2. 나의 코드
def solution(n, lost, reserve):
s = [1 for _ in range(0, n)]
for r in reserve:
s[r-1] += 1
for l in lost:
s[l-1] -=1
for i, v in enumerate(s):
if v != 0:
continue
else:
if s[i-1:i] == [2]:
s[i-1],s[i] = 1, 1
continue
elif s[i+1:i+2] == [2]:
s[i+1], s[i] = 1, 1
continue
return s.count(1) + s.count(2)
- enumerate를 사용
- '리스트 슬라이싱'을 통해 for문을 돌게되면 'list index out of bounds' 문제를 벗어날 수 있다.
3. 다른 사람의 코드
def solution2(n, lost, reserve):
_reserve = [r for r in reserve if r not in lost]
_lost = [l for l in lost if l not in reserve]
for r in _reserve: # 여유가 있는 애들 중
f = r - 1 # front
b = r + 1 # back
if f in _lost:
_lost.remove(f) # 앞쪽의 여유가 없는 애들
elif b in _lost:
_lost.remove(b) # 뒤쪽의 여유가 없는 애들
return n - len(_lost)
- '리스트 컴프리핸션'을 사용해서 리스트를 생성
- '여유가 있는 학생들'의 리스트(_reserve)를 돌면서, 앞과 뒤에 '여유가 없는 학생들'을 확인하고, (_lost)리스트에서 뺀다.
('여유가 있는 학생'이 '여유가 없는 학생'에게 줬다고 가정)
# 그런데 이 경우 양 옆으로 여유가 없는 학생들이 둘 다 있다면 오류가 생기지 않나?
4. 정리 및 리뷰
- for문을 돌 때 '리스트 슬라이싱'을 활용할 수 있는 방법을 배웠다.
코드 만족도: ★★★★☆
'알고리즘_코딩테스트 > 프로그래머스_Level1' 카테고리의 다른 글
6. 2016년 (0) | 2020.09.09 |
---|---|
5. K번째 수 (0) | 2020.09.09 |
3. 모의고사 (0) | 2020.09.09 |
2. 완주하지 못한 선수 (0) | 2020.09.09 |
1. 크레인 인형뽑기 게임 (0) | 2020.09.09 |
Comments