아직 파이썬이 익숙치 않아서 문법을 활용하지 못하고 문제에 써져있는 말 그대로 코드로 구현했다. 하지만 다른 사람들의 코드를 보니 내가 모르는 효율적인 문법들을 활용해 간결하게 잘 짠 것 같아서 문법들을 정리해 보려고 한다.
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
함수를 딱 한줄로 만들 수 있게 해준다
>>> def hap(x, y):
... return x + y
...
>>> hap(10, 20)
30
이 코드를 람다형식으로 바꾸면
>>> (lambda x,y: x + y)(10, 20)
30
리스트로부터 원소를 하나씩 꺼내서 함수를 적용시킨 다음,
그 결과를 새로운 리스트에 담아준다
>>> 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]
가끔 반복문으로 문제를 풀다가 인덱스 에러 때문에 애먹은적이 있었다
그럴 때 이 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!')