TIL 알고리즘

알고리즘

목록 보기
1/21

코드카타

각도기

def solution(angle):
    if 0 < angle < 90:
        return 1
    elif angle == 90:
        return 2
    elif 90 < angle < 180:
        return 3
    elif angle == 180:
        return 4

0 < angle < 90:인 경우부터 생각했고, elif로 이어서 적었다.

짝수의 합

def solution(n):
    empty_list=[]
    for i in range(0, n+1, 2):
        empty_list.append(i)
    add_num = 0
    for num in empty_list:
        add_num += num
    return add_num

각 요소를 더한다는 생각에 리스트부터 떠올렸다.

(n이 정수로 주어진다는 가정하에)
인자는 n 하나밖에 없으므로 이걸로 리스트를 만들어야했다.
range로 접근했지만, 막연한 개념뿐이라서 몇 번 테스트했다.

처음에는 range(n)으로 시도했다.

순조롭게 콜론:부터 빼먹었다.
SyntaxError: invalid syntax

리스트에 n-1까지만 채워져서 n+1을 인자로 넣었다.

그리고 range 문법을 내맘대로 적용해서 빈 리스트를 반환하기도 했다.
for i in range(n,1):
지금 보면 빈 리스트를 반환하는 것도 용하다.

간단하게 테스트로 인자를 돌려보다가 의도치않게 start, stop, step에 값이 알맞게 들어갔다.
for i in range(0, n+1, 2):

리스트의 수를 다 더하는 것은 그동안 주구장창 해왔던 가장 큰 수를 구하는 방법에서 돌려막았다.

후기

프로그래머스의 다른 제출물을 보니 내 시야가 많이 좁다고 느꼈다.

다른 참가자 풀이

각도기

def solution(angle):
    answer = (angle // 90) * 2 + (angle % 90 > 0) * 1
    return answer

이 풀이는 내 단계에서 적용하려면 시간이 오래 걸린다.
우선 1,2,3,4를 반환한다는 구조에서 착안한 직관을 이용한 것 같은데,
try error를 반복해서 푸는 내 방식과 많이 다른 길이다.

def solution(angle):
    if angle<=90:
        return 1 if angle<90 else 2
    else:
        return 3 if angle<180 else 4

깔끔해보이지만, 고치려면 다 지울 것 같다.

def solution(angle):
    angles = {180: 4, 91: 3, 90: 2, 0: 1}
    for base, result in angles.items():
        if angle >= base:
            return result

굉장히 깔끔하다. dictionary의 접근이 신선하고, .items()를 이용한 풀이가 맛있다.

짝수의 합

def solution(n):
    return sum([i for i in range(2, n + 1, 2)])

n = 0인 경우에 에러가 걱정되는 코드다.
하지만 실제 출력 시 0이 나온다.
다뤄보면 맛있는 코드다.

def hap(n):
    result = 0
    for i in range(0, n, 2):
        result += i
    print(result)

정우 팀장님이 리뷰해주신 코드다.
간단한 스니펫으로 외우면 좋을 것 같다.

0개의 댓글