https://programmers.co.kr/learn/courses/30/lessons/42862
코딩테스트 연습 - 체육복
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번
programmers.co.kr
def solution(n, lost, reserve):
answer = 0
# 1부터 사용하기 위해 n + 1
student = [0] * (n + 1)
# 도난당한 경우 -1
for l in lost:
student[l] -= 1
# 여벌 있는 경우 +1
for r in reserve:
student[r] += 1
# 1부터 n까지
for i in range(1, n+1):
# 도난 당한 학생인 경우
if (student[i] == -1):
# 바로 앞번호 학생이 줄 수 있는 경우
if ((i != 1) and student[i-1] == 1):
# 현재 학생은 체육복 받았으므로 +1
student[i] += 1
# 바로 앞번호 학생은 체육복을 빌려줬으므로 -1
student[i-1] -= 1
# 바로 뒷번호 학생이 줄 수 있는 경우
elif ((i != n) and student[i+1] == 1):
# 현재 학생은 체육복 받았으므로 +1
student[i] += 1
# 바로 뒷번호 학생은 체육복을 빌려줬으므로 -1
student[i+1] -= 1
# -1이 아닌 0, 1인 경우는 체육수업을 들을 수 있으므로 +1
for i in range(1, n+1):
if (student[i] != -1):
answer += 1
return answer
'programmers > Python' 카테고리의 다른 글
[programmers] 큰 수 만들기 / Python (0) | 2022.07.06 |
---|---|
[programmers] 가장 큰 수 / Python (0) | 2022.07.04 |
[programmers] 완주하지 못한 선수 / Python (0) | 2022.07.04 |
[programmers] 직사각형 별찍기 / Python (0) | 2022.07.04 |