[python] 프로그래머스 '기능개발' 문제 속 3가지 문법

EUNCHAE KIM·2022년 10월 26일
0

아직 파이썬이 익숙치 않아서 문법을 활용하지 못하고 문제에 써져있는 말 그대로 코드로 구현했다. 하지만 다른 사람들의 코드를 보니 내가 모르는 효율적인 문법들을 활용해 간결하게 잘 짠 것 같아서 문법들을 정리해 보려고 한다.

프로그래머스/스택과큐/기능개발 문제 링크

내 코드


def solution(progresses, speeds):
    answer = []
    subProgresses = []
    calProgresses = []
    cnt = 1
    result = []
    
    for i in range(len(progresses)) :
        subProgresses.append(100 - progresses[i])
        if subProgresses[i] % speeds[i] != 0 :
            calProgresses.append(subProgresses[i] // speeds[i]+ 1)
        else : 
            calProgresses.append(subProgresses[i] // speeds[i])
   
    
    for i in calProgresses : 
        if(len(result) == 0) : 
            result.append(i)
        else :    
            if (result[-1] >= i) : 
                result.append(result[-1])  
            else : 
                result.append(i)          
    
    
    temp = result[0]; 
    cnt = 0 
    for i in range(len(result)) :
        if temp != result[i] : 
                answer.append(cnt)
                cnt = 1 
                temp = result[i]
        else : 
               cnt += 1
    answer.append(cnt)       

    return answer

다른 사람의 코드

from math import ceil

def solution(progresses, speeds):
    daysLeft = list(map(lambda x: (ceil((100 - progresses[x]) / speeds[x])),range(len(progresses))))
    count = 1
    retList = []

    for i in range(len(daysLeft)):
        try:
            if daysLeft[i] < daysLeft[i + 1]:
                retList.append(count)
                count = 1
            else:
                daysLeft[i + 1] = daysLeft[i]
                count += 1
        except IndexError:
            retList.append(count)

    return retList

1) lambda 매개변수 : 표현식

함수를 딱 한줄로 만들 수 있게 해준다

>>> def hap(x, y):
...   return x + y
...
>>> hap(10, 20)
30

이 코드를 람다형식으로 바꾸면

>>> (lambda x,y: x + y)(10, 20)
30

왕초보를 위한 파이썬 3.5 람다

2) map(함수, 리스트)

리스트로부터 원소를 하나씩 꺼내서 함수를 적용시킨 다음,
그 결과를 새로운 리스트에 담아준다

>>> map(lambda x: x ** 2, range(5))             # 파이썬 2
[0, 1, 4, 9, 16]  
>>> list(map(lambda x: x ** 2, range(5)))     # 파이썬 2 및 파이썬 3
[0, 1, 4, 9, 16]

3) try except 예외처리

가끔 반복문으로 문제를 풀다가 인덱스 에러 때문에 애먹은적이 있었다
그럴 때 이 try:~ except IndexError: 를 활용하면 좋을 것 같다

try:
    실행 시도할 명령
except:
    에러 발생시 실행할 명령
try:
    my_list = [1, 2, 3, 4, 5]
    print(my_list[5])
except:
    print('Hello Error!')

try:
    실행 시도할 명령
except 에러이름:
    명시된 이름의 에러가 발생했을 때 실행할 명령
try:
    my_list = [1, 2, 3, 4, 5]
    print(my_list[5])
    
except IndexError:
    print('Hello Error!')

Python 문법 예외처리 (Exception)

profile
Try Everything

0개의 댓글