[부트캠프 8일차] 선형대수학

2026. 7. 13. 21:00·AI
반응형
wb_sunny 오늘 일상 공유

오늘은 일어나서 운동을 갔다가 부트캠프 실습 시간에 미션2를 마무리했다. 이후에 프로그래머스 문제를 한 문제 풀었고, 남은 시간은 복습을 했다. 수업을 마치고는 러닝을 다녀왔다. 오늘 블로그는 프로그래머스 1문제 풀이와 미션1 후기, 그리고 위클리 페이퍼 준비하면서 공부한 개념 1가지를 공유하려고 한다.

edit_note 오늘 코테 문제
문제햄버거 만들기
플랫폼프로그래머스
핵심 요구사항재료가 쌓이는 순서를 나타내는 정수 배열 ingredient가 주어졌을 때, 정해진 순서(빵-야채-고기-빵)로 쌓인 부분을 찾아 포장하는 햄버거 개수를 구하기
python
def solution(ingredient):
    answer = 0
    
    hamburger_stack = []
    
    for item in ingredient:
        hamburger_stack.append(item)
        
        if hamburger_stack[-4:] == [1,2,3,1]:
            for _ in range(4):
                hamburger_stack.pop()
            
            answer += 1
    return answer
풀이 접근법
처음엔 단순히 "1,2,3,1이 값으로 다 들어있는지"만 보면 되는 줄 알았는데, 이 문제의 핵심은 값이 아니라 순서였다. 재료가 쌓인 순서가 정확히 빵-야채-고기-빵일 때만 포장할 수 있고, 순서가 뒤바뀌어 있으면(예: 빵-고기-야채-빵) 값이 다 있어도 포장이 안 된다.
1
재료를 스택에 하나씩 쌓기
원본 배열을 처음부터 끝까지 순서대로 훑으면서, 조건 없이 무조건 append로 스택에 쌓는다. 실제로 상수 앞에 재료가 쌓이는 것도 조건 없이 순서대로 쌓이는 거라 자연스럽게 대응된다.
2
쌓을 때마다 맨 위 4개 확인
재료를 하나 쌓을 때마다 스택의 맨 뒤([-4:]) 4개가 [1,2,3,1]인지 확인한다. 슬라이싱은 뒤집는 게 아니라 원래 순서 그대로 잘라내는 거라, stack[-4]가 4개 중 가장 먼저 쌓인 값(아래쪽)이고 stack[-1]이 가장 나중에 쌓인 값(맨 위)이 된다.
3
패턴이 맞으면 4개를 통째로 제거
패턴이 매치되는 위치는 항상 스택의 맨 끝 4개이기 때문에, 값을 찾아 헤매는 remove()가 아니라 위치가 확정된 pop()을 4번(또는 del stack[-4:]) 호출하면 된다. 여기서 중요한 포인트는, 4개를 빼고 나면 그 아래 있던 재료가 자동으로 맨 위로 노출된다는 것이다. 그래서 원본 배열에서는 멀리 떨어져 있던 재료끼리, 사이에 낀 재료들이 먼저 빠지고 나면 새롭게 이웃이 되어 또 다른 햄버거를 완성시킬 수 있다.
시간복잡도
재료 개수(n)만큼 for문이 한 번 돌고, 매번 하는 슬라이싱·비교·pop이 전부 상수(4)만큼의 작업이라 O(n × 4)가 된다. 빅오 표기법에서는 입력 크기와 무관한 상수는 무시하기 때문에, 4는 떨어져 나가고 최종적으로 O(n)이 된다. ingredient 길이가 최대 100만이라, 배열 처음부터 다시 스캔하는 방식이 아니라 스택으로 한 번만 훑는 이 방식이 시간 안에 통과하는 데 중요했다.
school 미션1 후기
미션1은 파이썬으로 알고리즘 문제를 푸는 느낌이라 어렵지 않게 풀었다. 다만 멘토님께 피드백을 받은 부분이 있었는데, if문을 좀 더 간결하게 만들어보라는 것이었다. 파이썬의 특징 중 하나가 if문이나 for문을 한 줄로 줄일 수 있다는 점인데, 아직 손에 익지 않아서 항상 풀어서 쓰던 습관이 있었다.
문제는 문자열에서 모음(a, e, i, o, u)을 제거한 문자열을 반환하는 함수를 작성하는 것이었다.
피드백 전
python
def remove_vowels(s):
  vowels = "aeiou"
  answer = ''
  for c in s:
    if c in vowels:
      continue
    answer += c
  return answer
피드백 반영 후
python
def remove_vowels(s):
  vowels = "aeiou"

  return ''.join([ c for c in s if c not in vowels ])
이렇게 줄여보니 리스트 컴프리헨션이 단순히 코드를 짧게 만드는 게 아니라, 조건에 맞는 값만 걸러서 바로 join하는 흐름 자체를 한눈에 보여준다는 걸 느꼈다. 이런 파이썬다운 코드를 앞으로 익숙해지고 손에 익히는 게 중요하다고 느꼈다.
groups 위클리 페이퍼
매주 팀미팅 때마다 위클리 페이퍼에 공지된 주제를 가지고 내용을 공유한다. 이번 주제는 선형대수학이 무엇인지, 그리고 데이터 분석과 어떤 관련이 있는지였다. 주말에 공부하면서 정리한 내용 중에서, 선형대수학이 왜 머신러닝/딥러닝에 필요한지를 정리해봤다.
먼저 왜 필요한지 알아보기 전에, 선형대수학이 무엇인지 그리고 머신러닝과 딥러닝이 무엇인지부터 내가 이해될 때까지 공부해봤고, 그나마 이해하기 쉽게 정리해봤다.
선형대수학이란?
나무위키 정의에 따르면, 선형대수학은 덧셈과 상수곱 구조를 갖는 벡터공간과, 그 위에서 정의되고 벡터공간의 연산 구조를 보존하는 함수인 선형 변환에 관한 대수학이다. 정의를 막상 읽었을 때 한 번에 이해가 되지 않아서, 정의 안에 들어있는 용어부터 하나씩 뜯어보기로 했다.
먼저 벡터와 벡터공간
벡터는 크기와 방향을 가지는 대상이고, 벡터공간은 이런 벡터들이 모인 공간이다. 즉 벡터공간이라는 게 뭔가 거창한 게 아니라, 크기와 방향을 가진 화살표(벡터)들이 여러 개 모여있는 공간이라고 생각하면 됐다.
그 다음 대수학
대수학은 숫자 대신 기호(x, y, v 같은 것)를 써서 규칙과 계산을 다루는 수학 분야다. x + 2 = 5 같은 방정식을 푸는 게 대표적인 예시다. 결국 선형대수학은 이 대수학을, 벡터와 벡터공간이라는 대상에 적용한 분야라고 이해했다.
이렇게 용어를 하나씩 뜯어보고 나니, 원래 정의도 아래 두 가지로 나눠서 이해가 됐다.
①덧셈과 상수곱 구조를 갖는 벡터공간
②벡터공간의 연산 구조를 보존하는 함수, 선형변환
이렇게 분리해서 이해하고, 다시 하나로 합쳐서 정리해보았다.
① 덧셈과 상수곱 구조를 갖는 벡터공간
벡터끼리 더하거나(w + v) 상수를 곱해도(2v) 그 결과가 같은 공간 안에 그대로 남아있는 것을 직접 그려보면서 이해했다.
② 벡터공간의 연산 구조를 보존하는 함수, 선형변환
v, w를 먼저 더한 다음 T를 적용한 결과와, v와 w를 각각 T로 변환한 다음 더한 결과가 항상 같아야만 T를 "선형 변환"이라고 부를 수 있다는 것도 도식으로 정리했다.
이 두 경로의 결과가 항상 똑같아야만 T라는 함수를 "선형 변환"이라고 부를 수 있다.
풀어서 말하면, 선형대수학은 더하기·상수곱이 잘 작동하는 공간(벡터공간)을 연구하고, 그 공간 위에서 더하기·상수곱 순서를 바꿔도 결과가 똑같은 함수(선형변환)를 연구하는 학문이라고 정리할 수 있었다.
머신러닝 · 딥러닝과의 관계
머신러닝은 기계가 데이터를 기반으로 학습해서 특정 작업을 수행하는 것이고, 딥러닝은 그 하위 분류 중 하나로 인공신경망을 기반으로 한 학습 방법론이다(인공지능 > 머신러닝 > 딥러닝 순서).
그런데 '데이터를 기반으로 학습한다'는 게 컴퓨터 입장에서는 실제로 어떻게 이루어질까 궁금했다. 컴퓨터는 사진, 글자, 소리를 그대로 이해하지 못하고 오직 숫자만 이해하기 때문에, 머신러닝의 첫 단계는 모든 데이터를 숫자 뭉치(벡터)로 바꾸는 것이다. 그리고 머신러닝이 학습한다는 건, 사람처럼 말로 이해하는 게 아니라 입력 숫자 뭉치를 정답 숫자 뭉치로 바꿔주는 숫자표(행렬)를 찾아내는 것이다.
python
입력 벡터  ×  학습된 규칙(행렬)  =  예측 결과 벡터
이 벡터에 행렬을 곱해서 새로운 벡터를 만드는 계산이 정확히 선형대수학 영역이고, 머신러닝과 딥러닝에서 돌아가는 계산은 결국 선형대수학에서 이루어진다는 걸로 정리했다.
한 줄 정리
✓컴퓨터는 숫자만 이해하는데, 데이터도 숫자 뭉치(벡터)로, 학습된 규칙도 숫자표(행렬)로 저장되고, 이 둘을 곱하고 더해서 답을 계산하는 방법을 알려주는 수학이 선형대수학이라서 머신러닝/딥러닝에 꼭 필요하다.
이렇게 정의에 대해서 스스로 내용을 찾아보고 시각자료를 만들면서 확실히 머리에 더 남는 것 같다. 앞으로 AI를 처음 공부하면서 알게 되는 수많은 개념들이 있을 텐데, 위클리 페이퍼를 잘 활용해서 면접 대비를 할 수 있을 것 같다.
nights_stay 오늘 하루 회고

오늘은 코드 하나를 풀어도 "왜 이게 되는지"를 끝까지 붙잡고 늘어진 하루였다. 햄버거 스택 문제를 풀면서 처음엔 단순히 값만 맞추면 되는 줄 알았는데, 순서와 스택 구조를 제대로 이해하고 나니 왜 이 풀이가 맞는지 스스로 설명할 수 있게 됐다.

미션1 피드백을 받으면서는 답만 맞히는 것과 파이썬답게 쓰는 것 사이에 차이가 있다는 걸 다시 느꼈고, 위클리 페이퍼를 준비하면서는 그동안 막연하게만 알던 선형대수학과 머신러닝의 관계를 내 언어로 정리해볼 수 있었다. 문제를 그냥 통과시키는 것보다, 원리를 납득할 때까지 파고드는 습관을 계속 가져가야겠다는 생각이 든 하루였다.

반응형

'AI' 카테고리의 다른 글

[부트캠프 휴강일] 이론과 실습을 연결해보자 - 선형 회귀와 다중 선형 회귀  (0) 2026.07.18
[부트캠프 10일차] 예측이 틀렸을 때 - 손실 함수부터 K-폴드까지  (0) 2026.07.15
[부트캠프 5일차] 첫 멘토링 후기  (0) 2026.07.08
[부트캠프 3일차] 시간복잡도와 DataFrame 전처리 정리  (0) 2026.07.06
[부트캠프 2일차] 파이썬 기초부터 OOP까지  (0) 2026.07.03
'AI' 카테고리의 다른 글
  • [부트캠프 휴강일] 이론과 실습을 연결해보자 - 선형 회귀와 다중 선형 회귀
  • [부트캠프 10일차] 예측이 틀렸을 때 - 손실 함수부터 K-폴드까지
  • [부트캠프 5일차] 첫 멘토링 후기
  • [부트캠프 3일차] 시간복잡도와 DataFrame 전처리 정리
Riu
Riu
안녕하세요 iOS 개발자를 꿈꾸는 Riu입니다. Github: woolnd
  • Riu
    Riu 개발노트
    Riu
  • 전체
    오늘
    어제
    • 분류 전체보기 (43) N
      • AI (15) N
      • iOS 개발 (21)
        • SwiftUI (9)
        • UIKit (6)
        • Combine (5)
        • Architecture (1)
      • 알고리즘 (1)
      • 회고록 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    앗차!
    SWIFT
    ios
    막자알림서비스
    나만의todo
    코드잇스프린트잇
    Ai
    코드잇스프린트
    AI엔지니어
    figma
    SWIF
    구름톤유니브
    ios개발
    AI부트캠프
    회고록
    UIKit
    cleanArchitecture
    SwiftUI
    AI엔지니어취업
    Combine
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Riu
[부트캠프 8일차] 선형대수학
상단으로

티스토리툴바