티스토리 뷰

개발/Quiz

[codewars] Sort the odd

Taekyuu 2017. 12. 17. 10:54

문제 링크

https://www.codewars.com/kata/578aa45ee9fd15ff4600090d/train/python


def sort_array(source_array):
odd_num_idx = []
odd_num = []
for i,value in enumerate(source_array):
if value%2==1 :
odd_num_idx.append(i)
odd_num.append(value)
list.sort(odd_num)
for i,value in enumerate(odd_num_idx):
source_array[value] = odd_num[i]
return source_array

def sort_array2(arr):
odds = sorted((x for x in arr if x % 2 != 0), reverse=True)
return [x if x % 2 == 0 else odds.pop() for x in arr]


codewars의 python 문제들 풀다보면 거의다 list comprehension을 이용한 답이 상위권에 있다. 딱히 알고리즘적인 부분을 생각해야 하는 문제보다는 기능적인 부분이 중요해서 그냥 python 익숙해진다 생각하고 문제를 풀어야겠다

첫번째가 내가 쓴답인데 list comprehension 써보려다가 평범하게 for로 풀었다. 아래는 득표제일 많은 답. 수행시간은 위에 방법이 아래보다 두배 정도 더 걸린다. 

아래 방법중에 list comprehension 두번 모두 if문을 사용했는데 하나는 in 다음에, 하나는 for 앞에 사용을 했다. in 뒤에 있는 if문을 for앞으로 옮기면 에러가 나는데 , for 앞쪽에는 if else 문의 형태로 와야 하는 것 같다. 뒤쪽 if는 조건을 체크해서 해당조건이 만족 될 때만 x를 리스트에 반환시킨다. 앞쪽에 if 절을 놓게 되면 조건을 만족할때는 if앞에 있는 변수를 조건이 false일때는 else 값을 반환한다. 





댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함