DHistory
[Programmers] Level 1 - 체육복 본문
문제
풀이
"""
바로 앞/뒤만 체육복을 빌려줄 수 있음
체육복을 최대한 많은 학생이 입도록 해야함
n: 전체 학생 수
lost: 체육복을 도난당한 학생 번호
reserve: 여벌의 체육복을 가져온 학생 번호
주의) 여벌 체육복을 가져온 학생이 도난당할 수 있음
"""
def solution(n, lost, reserve):
array = ['O'] * (n + 1)
array[0] = 'N'
spare_student = set(reserve) - set(lost)
lost_student = set(lost) - set(reserve)
for number in spare_student:
array[number] = 'S'
for number in lost_student:
array[number] = 'X'
# 여벌 체육복을 가져온 학생이 도난
for number in set(lost) & set(reserve):
array[number] = 'O'
# 양 옆 번호인 경우 나누어 줌
for i in range(1, n):
if (array[i], array[i + 1]) == ('S', 'X') or (array[i], array[i + 1]) == ('X', 'S'):
array[i], array[i + 1] = 'O', 'O'
# 전체에서 체육복을 나눔받지 못한 학생을 뺌
return n - array.count('X')
채점 결과
'Computer Science > Algorithm' 카테고리의 다른 글
[Programmers] Level 1 - K번째수 (0) | 2023.08.08 |
---|---|
[Programmers] Level 1 - 모의고사 (0) | 2023.08.08 |
[Programmers] Level 1 - 크레인 인형뽑기 게임 (0) | 2023.08.08 |
[Programmers] Level 1 - 키패드 누르기 (0) | 2023.08.07 |
[Programmers] Level 1 - 두 개 뽑아서 더하기 (0) | 2023.08.07 |