본문 바로가기
카테고리 없음

[TIL]24.03.04 내일배움캠프 4주차 + 컴퓨팅사고, 알고리즘 문제

by Byeong 2024. 3. 5.

4주 차 알고리즘 주차가 시작됐다.

학습목적은 자료구조/알로리즘과 컴퓨팅사고를 통해 주어진 문제를 얼마나 효율적으로 깔끔하게 해결할 수 있는가가 이번 주차의 목적이다.

 

일단 컴퓨팅 사고는 문제를 효과적으로 정의하고 풀어나가는 사고방식인데 잘 설명해 주셨지만 문제를 분해해서 인식하고 이것을 해결하는? 이 정도만 기억에 남았다... 

 시간 복잡도와 배열과 연결 리스트의 구분과 로그 등 문제에 대해 다양한 하게 알려 주셨다. (다시 한번 듣기)

 

최대한 문제를 분해하고 패턴을 인식하고 추상화하여 알고리즘 만들기? 실전에서 사용하며 문제를 풀어 보았다.

 

 

 

 짝수의 합

 

문제

정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

 

입출력 예 

n = 10

result  = 30

n이 10 이므로 2 + 4 + 6 + 8 + 10 =30 return 합니다.

 

def solution(n):
    answer = 0
    return answer

 

 

1. 일단 n이 정수의 짝수들을 구한다.

2. 짝수들을 하나하나 더한다.

3. 더한 짝수를 return 한다.

 

 

처음 생각한 방식은

def solution(n):
    a = 0
    for i in range(1,(n//2)+1):
        a = a +(2*i)
    return a

 

n을 2로 나눈 몫을 구해 짝수가 얼마나 있는지 확인하고

range를 통해 1 ~ (n//2)+1  범위 안에 수를 i에게 부여해한다. +1을 해준 이유는 짝수로 떨어진 자면 마지막 짝수 자리 숫자가 출력이 불가능해요 추가했다. 

i에서 나온 숫자를 2를 곱해 차근차근 a의 변수에 저장해게하여 끝까지 for 반복문을 돌게 했다.

반복문을 빠져나오면 a값을 return 해주면 끝

 

 

추후에  range 함수에 모르는 부분이 있어다.

 

range(start, stop, step) 형식으로 마지막에 인자를 넣으면 숫가 간의 간격을 만들 수 있는 부분이었다.

def solution(n):
    a = 0
    for i in range(0,n+1,2):
        a +=i
    return a

 

다신 이렇게 깔끔하게 정리를 했다. 

range라는 함수를 나중에도 자주 사용하는 거 같은데 이번에 확실하게 알아주고 넘어갈 수 있는 기회였다.

 

 

다른 사람들이 푼 문제 중에는 sum이라는 함수를 이용하여 

def solution(n):
    return sum(range(0,n+1,2))

 

아주 간단하게 두줄로 끝내는 경우도 있었다. 

 

그중에서도 가장 기억에 남는 것은 

def solution(n):
    return 2*(n//2)*((n//2)+1)/2

 

등차수열 2n의 합공식을 이용했다는데... 이 부분은 따로 더 찾아봐야 할 부분인 거 같다. 

역시 수학공부를 더 했어야 하나ㅠㅠ

 

마무리 

 내일도 여러 알고리즘 문제를 풀어나가며 재미있는 유형을 볼 생각 하니 벌써 기대가 된다.

오늘 배운 컴퓨징사고를 기반으로 차근차근 노트에 작성하며 푸는 연습을 통해 내 것으로 만들어야겠다.