TIL_230828

Sol Lee·2023년 9월 19일
0
post-custom-banner

오늘 한 일

프로그래머스 알고리즘 문제풀이


# 정수 내림차순으로 배치하기

# 함수 solution은 정수 n을 매개변수로 입력받습니다. 
# n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 
# 예를들어 n이 118372면 873211을 리턴하면 됩니다.

# 내 코드
def solution(n):    
    return int("".join(sorted(list(str(n)), reverse=True)))



# 하샤드 수

# 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 
# 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 
# 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

# 내 코드
def solution(x):
    
    num = 0
    num_str = list(str(x))
    for i in num_str:
        num += int(i)
    
    return False if x%num else True

# 다른 사람 코드
def solution(n):
    return n%sum(int(x) for x in str(n)) == 0

## 내 코드의 경우 for문을 돌기전에 list로 만들었는데 불필요한 부분이었다.
## sum을 항상 까먹는다.~~붕어도아니고~~


# 두 정수 사이의 합

# 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
# 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

# 내 코드
def solution(a, b):
    answer = 0
    if a == b:
        return a
    elif a < b:
        x,y = a,b
    else:
        x,y = b,a

    for i in range(x,y+1):
        answer += i

    return answer

# 다른 사람 코드 1
def solution(a, b):
    if a > b:
        a, b = b, a
    return sum(range(a, b + 1))

## 내 코드의 경우 모든 경우의 수를 적어 두었는데 range부분에 순서가 바뀌어야하는 경우만 적어도 작동함.
## sumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsumsum

# 다른 사람 코드 2
def solution(a, b):
    return sum(range(min(a, b), max(a, b)+1))

## min, max 로 range의 범위를 정하는 방법도 있었다

알고리즘 강의

초간단 정리

  • 4주차 수업내용
    버블 정렬: 앞부터 두 숫자의 크기를 차례대로 비교해서 큰 수를 한자리씩 뒤로 미루기 맨 뒤부터 정렬
    선택 정렬: 맨 앞부터 뒷자리 수를 비교하여 제일 작은 수를 앞으로 세우기 = 맨 앞부터 정렬
    삽입 정렬: 하나씩 추가된다고 가정하고 나중에 추가된 수를 있는 수와 비교
    버블, 선택, 삽입 정렬은 시간 복잡도가 좋은 편은 아님
    퀵 정렬: 기준값을 설정하고 기준보다 큰집합과 작은 집합으로 나눠서 그 사이에 기준값을 삽입하여 정렬
    배열 정렬: 최악의 경우
    병합 정렬: 배열을 1/2로 쪼개면서 정렬하고 정렬된 두 배열을 다시 합치면서 정렬
    힙 정렬: 뭐라는거임
    내장함수는 tim sort = 삽입정렬과 병합정렬을 섞어서 최적화시킴
profile
직업: 개발자가 되고 싶은 오레오 집사
post-custom-banner

0개의 댓글