프로그래머스 체육복 javascript와 python의 비교

프로그래머스 체육복 javascript와 python의 비교

문제가 이렇게 나왔다

우습게도 이것도 예전에 풀었던 문제였다.

function solution(n, lost, reserve) { var arr = []; //빌려줄 수 있으면 true, 아니면 false for(let i=1;i<=n;i++){ arr.push(1) //체육복 1개줌 if(reserve.includes(i)){ //체육복 2개가져왔으면 1개 추가해줌 arr[i-1]++; } if(lost.includes(i)){ //체육복 없으면 1개 깜 arr[i-1]--; } } for(let i=0;i0){ cnt++; } } return cnt; }

일단 기본적인 방식은 전체 학생의 수만큼 반복하면서 각 배열의 값에 따라 정답 배열의 값을 더하거나 빼는 것이다.

def solution(n, lost, reserve): u = [1]*(n+2) for i in reserve: u[i]+=1 for i in lost: u[i]-=1 for i in range(1,n+1): if(u[i-1] == 0 and u[i]==2): u[i-1:i+1] = [1,1] elif u[i] == 2 and u[i+1] == 0 : u[i:i+2] = [1,1] print([x for x in u[1:-1] if x>0]) return len([x for x in u[1:-1] if x>0])

기본적인 로직은 동일하나, 슬라이싱을 이용하여 조금 더 코드가 간결해졌다.

def solution(n, lost, reserve): for i in reserve : if i in lost : reserve.remove(i) lost.remove(i) for i in sorted(reserve) : if i-1 in lost or i+1 in lost : try: lost.remove(i-1) except: lost.remove(i+1)

처음에 푼 코드이다.

이것도 정상적으로 문제는 풀리지만

list에 대한 remove의 수행시간이 O(n)만큼 걸리기 때문에 비효율적이라 위의 코드로 변경했다.

from http://1eed00.tistory.com/272 by ccl(A) rewrite - 2021-11-05 12:01:55