SW/알고리즘

파이썬 : 프로그래머스 : 체육복 : 풀이

얇은생각 2019. 8. 29. 18:30
반응형

풀이

def solution(n, lost, reserve):
    answer = 0
    
    student = []
    
    for i in range(n):
        student.append(0)
        
    for i in lost:
        student[i-1] -= 1
    
    for i in reserve:
        student[i-1] += 1

    for i in range(0, len(student)):
        if student[i] == 1:
            if i -1 >= 0:
                if student[i-1] == -1:
                    student[i-1] += 1
                    student[i] -= 1
        
        if student[i] == 1:           
            if i + 1 < len(student):
                if student[i+1] == -1:
                    student[i+1] += 1
                    student[i] -= 1
                
    for stu in student:
        if stu >= 0:
            answer += 1
    return answer

 

 

실행 결과

정확성 테스트

테스트 1 통과 (0.04ms, 10.8MB)
테스트 2 통과 (0.04ms, 10.7MB)
테스트 3 통과 (0.04ms, 10.9MB)
테스트 4 통과 (0.05ms, 10.8MB)
테스트 5 통과 (0.05ms, 10.8MB)
테스트 6 통과 (0.04ms, 10.8MB)
테스트 7 통과 (0.05ms, 10.8MB)
테스트 8 통과 (0.05ms, 10.7MB)
테스트 9 통과 (0.04ms, 10.8MB)
테스트 10 통과 (0.05ms, 10.8MB)
테스트 11 통과 (0.04ms, 10.7MB)
테스트 12 통과 (0.04ms, 10.7MB)

채점 결과

정확성: 100.0

합계: 100.0 / 100.0

 

 

총평

우선은 크기에 해당하는 만큼 0으로 배열을 선언합니다. 그 이후에, 도난 당한 학생들은 해당 값에 -1을 해줍니다. 그리고 여분의 체육복을 가지고 있는 학생들은 +1을 해줍니다. 도난 당하면서, 여분의 체육복을 가지고 있는 경우의 수가 있기 떄문에 값을 바로 초기화하지 않도록 주의해야 합니다. 그다음, 여분의 체육복이 있는 경우, 먼저 앞에 학생에게 빌려줍니다. 만약 앞의 학생이 있는 경우, 뒤에 학생의 체육복 여부를 판별하고 체육복을 빌려주도록 알고리즘을 구현합니다. 배열 인덱스 에러가 나지 않도록 주의해야 했습니다. 그 후, 배열에서 -1이 아닌 경우 체육복이 있는 경우이므로, 해당 경우를 카운트 하여 값을 리턴해 문제를 해결하였습니다. 

반응형