ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • playdata 프로그래머스 체육복
    파이썬/알고리즘 공부 2021. 8. 4. 23:50
    728x90

    playdata 프로그래머스 체육복



    문제 접근방식

    • 1. 모두 다 체육복을 가지고 있다는 가정하에 쉽게 접근
    • 2. 잃어버린 번호와 여벌을 가지고 있는 변수 lost와 reserve를 인덱스로 가져와 해당값을 -1, +1 해줌으로써 쉽게 변환 --------- [1,1,1,1,1]에서 [2,4]를 받아와 -1해줌으로써 ->[1,0,1,0,1]형태로 처리, [1,3,5]를 받아와 +1을 해 [2,0,2,0,2] 형태로 만듬
    • 3. 위에서 만든 리스트에 i가 0 보다 클 경우와, i가 n-1 보다 작을경우 나누어 처리
    • ex1) i 가 0보다 클경우 해당값이 0이고 앞에값이 2이면 앞에 값으로 부터 1을 받아온다(인덱스 0은 앞에값을 받을 수 없으므로 i가 n-1보다 작을경우에 처리)
    • ex2) i 가 n-1보다 작을경우 해당값이 0이고 뒤에값이 2이면 뒤에 값으로 부터 1을 받아온다(인덱스 n-1은 뒤에값으로 부터 받을 수 없으므로 i가 0보다 클경우에 처리)
    def solution(n, lost, reserve):
        answer = 0
        have = [1]*n //다 가지고 있다가정하에 n개의 수만큼 1을 넣어준다
    
        //잃어버린 번호를 인덱스로 가져와 -1을 해준다
        for i in lost:
            have[i-1]= have[i-1]-1 //[1,0,1,0,1]
    
        //여유분을 가지고 있는 번호를 인덱스로 가져와 +1을 해준다    
        for i in reserve:
            have[i-1]= have[i-1]+1 //[2,0,2,0,2]
    
        // enumerate함수를 통해 i와v에 인덱스 와 값을 넣어준다    
        for i,v in enumerate(have):
    
            // 2가지 상황으로 분리(i<0일경우, i<n-1일경우)
            // -i가 0일때와 i가 n-1일경우 서로 값을 처리
    
            //i가 0 보다 클 경우 값이 0이고,  앞에 있는 값이 2이면
            //해당 인덱스값에 +1, 앞에 인덱스에 -1을 해준다
            if i>0 and v==0 and have[i-1]==2:
                have[i] += 1
                have[i-1] -= 1
    
            //i가 n-1보다 작을 경우 값이 0이고,  뒤에 있는 값이 2이면
            //해당 인덱스값에 +1, 뒤에 인덱스에 -1을 해준다    
            elif i < n-1 and v==0 and have[i+1]==2:
                have[i] += 1
                have[i+1] -= 1
    
        해당 개수에서 0의 개수를 빼준다
        answer = n - have.count(0)       
        return answer

    댓글

Designed by Tistory.