# 내 코드
def solution(arr, divisor):
answer = []
for num in arr:
if num % divisor == 0:
answer.append(num)
answer.sort()
if len(answer) == 0:
answer.append(-1)
return answer
# 남 코드
def solution(arr, divisor):
return sorted([n for n in arr if n%divisor == 0]) or [-1]
or 연산자는 왼쪽 피연산자가 '참'이면 왼쪽 값을,'거짓'이면 오른쪽 값을 반환하게 만든다. 또한 빈리스트 []는 논리적으로 '거짓'이기 때문에 결과값이 빈 리스트일 경우에는 [-1]을 출력한다.
리스트 컴프리헨션만 활용해도 코드가 상당히 줄어들 텐데 아직 익숙하지가 않아 쓸 수 있는 상황을 쉽게 구별하지 못해 아쉽다.
# 내 코드
def solution(absolutes, signs):
lst = []
for a, s in zip(absolutes, signs):
if s == True:
lst.append(int(a))
else:
lst.append(-int(a))
answer = sum(lst)
return answer
# 남 코드 1
def solution(absolutes, signs):
return sum(absolutes if sign else -absolutes for absolutes, sign in zip(absolutes, signs))
# 남 코드 2
def solution(absolutes, signs):
answer=0
for absolute,sign in zip(absolutes,signs):
if sign:
answer+=absolute
else:
answer-=absolute
return answer
기본적으로 zip을 사용해서 풀었다는 점은 같지만 내 코드가 실행 시간이 좀 더 오래걸림.
왜 이렇게 차이날까 했더니 answer = sum(lst) 부분을 for루프 안에 집어넣는 실수를 했다. 그래서 시간 복잡도가 O(n)이 되어버렸던 것이다.
남 코드 1 정도는 바라지도 않지만 남 코드 2처럼 조금 더 간단한 방법을 사용하여 코드를 짜려고 노력하는 중이다.
내 코드와 다른 사람들의 코드를 비교해보면서 실행시간과 간결함을 모두 신경쓰려 해보고 있다. 코드의 길이가 짧을수록 좋은 코드인 것은 아니겠지만 현재 내가 쓰고 있는 코드가 지나치게 길다고 느껴진다. 또한, 시간복잡도가 다른 사람들의 코드들에 비해 n만큼 차이나는 경우가 허다하는 점도 큰 문제이다.