241015 TIL

mj_data·2024년 10월 15일

TIL

목록 보기
17/32

SQL 문법

  • WHERE 절에서 AND가 OR보다 우선순위가 높다. 따라서 괄호로 묶어줘야 논리적으로도, 시각적으로도 문제가 없다.
  • COALSECE vs IFNULL
    - COALSECE는 SQL 표준함수, IFNULL은 MySQL에서만 사용 가능
    - COALSECE는 multiple argument 처리 가능, IFNULL은 single argument만
    - 더 유연하고 표준함수인 COALESCE함수 사용
    - COALESCE는 병합한다는 의미로, 조건에 따라 두 칼럼을 합치는 것이 원래 기능

파이썬 코드카타

1.

문제

# 내 코드
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]을 출력한다.
리스트 컴프리헨션만 활용해도 코드가 상당히 줄어들 텐데 아직 익숙하지가 않아 쓸 수 있는 상황을 쉽게 구별하지 못해 아쉽다.

2.

문제

# 내 코드
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(n2^2)이 되어버렸던 것이다.
남 코드 1 정도는 바라지도 않지만 남 코드 2처럼 조금 더 간단한 방법을 사용하여 코드를 짜려고 노력하는 중이다.

내 코드와 다른 사람들의 코드를 비교해보면서 실행시간과 간결함을 모두 신경쓰려 해보고 있다. 코드의 길이가 짧을수록 좋은 코드인 것은 아니겠지만 현재 내가 쓰고 있는 코드가 지나치게 길다고 느껴진다. 또한, 시간복잡도가 다른 사람들의 코드들에 비해 n만큼 차이나는 경우가 허다하는 점도 큰 문제이다.

0개의 댓글