[TIL]Day 153

이재희·2021년 5월 1일
0

TIL

목록 보기
153/312

푸는 방식(?)은 똑같은데 구현한것에 따라서 효율성이 많이 차이가 난다. 여러가지 코드를 참고하면서 효율적인 코드 작성에 대해서 공부해야겠다.

짝지어 제거하기
효율성 통과 못한 코드

def solution(s):
    s = [t for t in s]
    stack = [s.pop(0)]
    while s:
        stack.append(s.pop(0))
        while len(stack) > 1 and stack[-1] == stack[-2]:
            stack.pop()
            stack.pop()
    if stack:
        return 0
    else:
        return 1

효율성 통과 코드

def solution(s): 
    stack = []
    for i in s:
        if len(stack) == 0: stack.append(i)
        elif stack[-1] == i: stack.pop()
        else: stack.append(i)
    if len(stack) == 0: return 1
    else: return 0 

두 코드 실행시간이 10배 가까이 난다.

숫자의 표현
효율성 통과 못한 코드

def solution(n):
    answer = [i for i in range(n+1)]
    cnt = 0
    for i in range(1,n+1):
        answer[i] += answer[i-1]
        if answer[i] >= n:
            for j in range(i-1,-1,-1):
                if answer[i] - answer[j] == n:
                    cnt += 1
                    break
    return cnt

효율성 코드
https://velog.io/@insutance/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4Python-%EC%88%AB%EC%9E%90%EC%9D%98-%ED%91%9C%ED%98%84

def solution(n):
    count = 0                      
    for i in range(1, n+1):         # 예시의 `15=15`도 있기 때문에 n+1 까지 반복문 실행
        sumN = 0                     
        for j in range(i, n+1):     # i값을 시작으로 반복문 실행
            sumN += j               # i값부터 계속해서 값을 더해준다
            if sumN == n:           # 더한 값이(sumN)이 n과 같다면 count +1, break
                count += 1          
                break
            if sumN > n:            # 더한 값(sumN)이 n보다 크다면 계산할 필요가 없음
                break
    return count
profile
오늘부터 열심히 산다

0개의 댓글