1. Facts (사실)

  • 이번 주에 어떤 일이 있었나요?
    • GCC 코딩 인터뷰 스터디 2회차 : Coco와 1:1로 대화를 나누며 인터뷰 준비
    • 캐글 스터디 시작
    • DS알고리즘 스터디 시작
    • 회사에서는 향후 인력이 더 부족해질 것이란 느낌이 듬
    • Project One 첫 미팅 진행하고, 만들고 싶은 서비스 아이디어를 공유함
    • 주말에는 가족 넷이서 처음으로 국립어린이청소년도서관에 나들이 갔음
      • 매주, 최소 격주라도 같이 가면 좋겠음
    • 저녁에 아이들 tv를 보여주지 않고, 가족 모두 함께 책 읽는 시간을 가지기로 함
      • 몇년만인지 모르겠지만 집에서 책을 펼쳐 봄 (오은영의 욱하는 부모...)
    • 블로그의 코딩블락이 이상해서 html, css를 고치려 몇시간동안 헤맸으나 실패함.
  • 달성한 목표와 성취한 작업은 무엇인가요?
    • 챌린저스 활용하여 매일 조금이라도 운동하기 1주 완료!
    • 매주 0.5kg 감량 2주차 성공!
    • GCC 코딩 인터뷰 스터디, 캐글 스터디, DS알고리즘 스터디, 네이버 DS 부스트코스 총 4가지 모두 포기하지 않았다!

2. Feelings (감정)

  • 이번 주에 어떤 감정을 느꼈나요?
    • 긍정적 감정 (기쁨, 성취감, 자신감 등)
      • 포기하지 않고 꾸준히 이루어낸 점에 대해서 스스로 성취감이 듬
      • 첫 발을 디디기가 어려울 뿐, 막상 디디고 나니 두 번째, 세 번째 발을 디디는것은 어렵지 않은거 같음
    • 부정적 감정 (스트레스, 불안, 좌절 등)
      • 그다지..
  • 작업이나 목표를 달성하면서 느낀 감정은 무엇인가요?
    • 내가 쌓아가는 하루하루가 든든한 버팀목이고, 이게 쌓여가면 불안함 등 부정적 감정이 줄어든단 것을 깨달음
    • 내가 선망하는 필드의 사람들이 생각보다 내가 다다르지 못할 정도로 높은 곳에 있는 건 아닐 수도 있단 생각을 하게 됨

3. Findings (발견)

  • 이번 주에 무엇을 배웠나요?
    • Make 를 이용해서 자동화 하는 법을 유튜브를 보며 익힘
      • Josh님의 유튜브였고, 강의 내용과는 현재 달라진 부분을 파악, 처리하고, 나에게 맞도로 일부분을 바꿔서 적용함
        • 강의에서 소개한 Aptify의 actor가 maintenance 중이라서 다른 것으로 바꾸게 되었는데, 에러가 발생함.알맞은 json 양식을 찾아 적용하니 에러 해결!
        • 강의에서는 Slack이나 다른 sns에 정보를 넘기는 것을 보여줬는데, 나는 ACTGPT 동호회 활동을 위해 discord에 메시지를 넘겨야 하는 상황이어서, discord 공식 문서를 확인하여 discord 봇을 만들게 됨.
  • 어떤 통찰이나 교훈을 얻었나요?
    • 와이프가 정서적으로 힘들어했는데, 이를 공감해주는 것이 중요하단 것을 다시 한 번 깨달음
      • 아이들 돌보느라 힘들어 look forward to 할 것이 필요하고, 해외 여행 가는 것에 대해 말한 것에 대해,
        이민을 위해서는 경제적으로 아껴야 한다고 decline.
      • 나는 공감능력이 충분치 않단 것을 인지하고, 의식적으로 노력하는 것이 필요하단 것을 깨달음

4. Future (미래)

  • 다음 주에 달성하고자 하는 목표는 무엇인가요?
    • Tell me about your self.... 이번주에는 꼭 끝내고, 인재형님께 연락드리기
    • 참여중인 스터디, 이번 주도 모두 잘 진행하기
    • 가족 여행계획 세우기
    • 챌린저스 습관 루틴도 잘 지키기
    • 블로그 재정비하기
  • 이번 주의 교훈을 바탕으로 다음 주에 어떻게 개선할 수 있을까요?
    • 강제적으로 스케쥴을 만들어놔서 어떻게든 쳇바퀴가 굴러는 가고 있으나, 체계적으로 매끄럽게 돌아가는 것 같지는 않음. 이는 세우기로 했던 시간표를 명시적으로 짜지 않았기 때문으로 생각됨
  • 어떤 전략을 사용할 계획인가요?
    • 시간표를 짠다 - 놀 때 놀고, 공부할 때 공부하자

5. Feedback (피드백)

  • 스스로에게 주고 싶은 피드백은 무엇인가요?
    • 자신에게 칭찬할 점
      • 무료 스터디이기 때문에 중간중간 포기하고 싶단 생각이 많이 들었지만, 그래도 포기하지 않아서 칭찬해
    • 개선이 필요한 점
      • 시간을 좀더 알차게 쓰자! 놀 때 마음의 짐을 덜고, 공부할 때 집중해서 공부하자

알고리즘을 설계하거나 분석할 때, 우리는 주로 알고리즘의 효율성을 평가하기 위해 시간복잡성공간복잡성을 고려합니다. 이 두 개념은 각각 알고리즘이 실행되는 데 필요한 시간과 메모리의 양을 나타냅니다. 이러한 복잡성을 설명할 때 자주 사용하는 것이 바로 Big O 표기법입니다.

Big O 표기법이란?

Big O 표기법은 알고리즘의 성능을 수학적으로 나타내는 방법 중 하나로, 입력 크기에 따라 알고리즘의 실행 시간이 어떻게 증가하는지를 설명합니다. 시간복잡성공간복잡성을 표현하는 데 사용되며, 주로 최악의 경우를 기준으로 성능을 평가합니다.

Big O 표기법이 중요한 이유

  1. 효율성 비교: Big O 표기법은 서로 다른 알고리즘을 공정하게 비교할 수 있는 수단을 제공합니다. 입력 크기가 커질수록 어떤 알고리즘이 더 효율적인지 쉽게 판단할 수 있습니다.
  2. 최악의 경우 대비: Big O는 최악의 경우를 기준으로 성능을 평가하므로, 알고리즘이 일정 수준의 성능을 보장하는지 확인할 수 있습니다.
  3. 독립적인 평가: Big O는 하드웨어나 프로그래밍 언어와 무관하게 알고리즘 자체의 복잡성을 평가하므로, 이론적 분석이 가능합니다.

시간복잡성 예시

O(1): 상수 시간복잡성

가장 간단한 시간복잡성으로, 입력 크기에 상관없이 일정한 시간이 소요됩니다.

def get_first_element(arr):
    return arr[0]

이 함수는 배열의 첫 번째 요소를 반환하는데, 배열의 크기와 상관없이 항상 동일한 시간이 소요되므로 O(1)입니다.

O(n): 선형 시간복잡성

입력 크기에 비례하여 실행 시간이 증가하는 경우입니다.

def print_all_elements(arr):
    for element in arr:
        print(element)

이 함수는 배열의 모든 요소를 출력하는데, 배열의 크기 n에 따라 실행 시간이 선형적으로 증가하므로 O(n)입니다.

O(log n): 로그 시간복잡성

입력 크기가 커질수록 실행 시간이 느리게 증가하는 경우로, 이진 탐색(Binary Search)이 대표적인 예입니다.

def binary_search(arr, target):
    left, right = 0, len(arr) - 1

    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1

    return -1  # 값을 찾지 못한 경우

이진 탐색은 정렬된 배열에서 특정 값을 찾을 때 배열을 절반씩 줄여가며 탐색하므로, 탐색 범위가 로그(logarithm) 비율로 줄어듭니다. 따라서 이진 탐색의 시간복잡성은 O(log n)입니다.

O(n²): 이차 시간복잡성

중첩된 반복문이 있을 때 주로 발생하며, 입력 크기가 증가함에 따라 실행 시간이 제곱에 비례하여 증가합니다.

def print_all_pairs(arr):
    for i in range(len(arr)):
        for j in range(len(arr)):
            print(arr[i], arr[j])

이 함수는 배열의 모든 요소 쌍을 출력하며, 배열의 크기가 n이라면 실행 시간은 n * n, 즉 O(n²)가 됩니다.

공간복잡성 예시

공간복잡성은 알고리즘이 실행되는 동안 필요한 메모리의 양을 나타냅니다.

O(1): 상수 공간복잡성

입력 크기에 상관없이 일정한 메모리만 필요로 하는 경우입니다.

def sum_two_numbers(a, b):
    return a + b

이 함수는 두 숫자의 합을 구하는데, 입력 크기와 상관없이 일정한 메모리만 필요하므로 O(1)입니다.

O(n): 선형 공간복잡성

입력 크기에 비례하여 메모리 사용량이 증가하는 경우입니다.

def copy_array(arr):
    copy = []
    for element in arr:
        copy.append(element)
    return copy

이 함수는 주어진 배열을 복사하는데, 입력 배열의 크기가 n일 경우 동일한 크기의 배열을 새로 생성하므로 O(n)의 공간복잡성을 가집니다.

결론

Big O 표기법은 알고리즘의 성능을 이해하고 비교하는 데 중요한 도구입니다. 시간복잡성과 공간복잡성을 명확하게 표현함으로써, 우리는 알고리즘이 얼마나 효율적인지, 어떤 상황에서 더 적합한지를 판단할 수 있습니다. 알고리즘을 설계할 때 이러한 복잡성을 고려하면, 더 나은 성능을 가진 소프트웨어를 개발할 수 있을 것입니다.


- CV 이용, 카페 / 지하철 등 빈 자리 체크
    - 따릉이 앱처럼 어디 위치의 카페에 빈 좌석이 몇 개 있는지
- 노인성질환 있는 분들과 대화 상대가 되어주고, 생활을 보조할 수 있는 음성 어시스턴트
    - 치매 노인 일기를 기반으로
    - Responsive한 모델이 아니라, active하게 먼저 질문을 하고, 응답 내용을 db화한 다음에 계속 이를 바탕으로 대화를 이어나가고 이끌 수 있어야 함. 필요시 웹서치도 진행해야함
- 스마트폰 카메라로 책 내용 인식, 원하는 사람의 목소리로 책을 읽어주는 봇
- 유저 페르소나에 따라 여행 계획을 짜주는 서비스
    - 기존 서비스와의 차별성을 만들기 위해 해외 or 국내 / 타겟 유저 등을 세분화 해야 함
        - 예) 외국인들 대상으로, 서울 여행지 중 한국인들 사이에서의 trending하는 장소 위주 추천
               부모들 대상으로 아이들 데리고 가기 좋은 장소 위주 추천 (주차, 기저귀갈이대, 아기의자 등)
- 신규 프로젝트/연구 topic에 대해, 기조에 유사한 프로젝트/리서치가 있었는지를 평가해주고  가이드를 주는 서비스
    - 예) 연구 키워드를 넣어 서치를 진행하면, 기존에 유사한 키워드의 연구들이 무엇인지 제시 및 유사도 측정 / 이후 다른 키워드를 추천
- 유저 페르소나에 따라 블로그 / SNS 자동 포스팅
- 주식 가격 예측 (차트 그려주기)
- 현 주가 상황에서 투자 전략 알려주기
    - 매수/매도 추천, 포트폴리오 변경 추천
- 달리기 및 운동 트레이닝 코치
- 식당 추천
- 휴가 날짜 선정
- 커리어 상담
- MBTI 관련 웹사이트 유사한 토이프로젝트
    - CliftonStrengths34 / 원영적사고봇

문제 출처

https://leetcode.com/problems/valid-parentheses/description/

 

문제

Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Every close bracket has a corresponding open bracket of the same type.

Example 1:

Input: s = "()"
Output: true
Example 2:

Input: s = "()[]{}"
Output: true
Example 3:

Input: s = "(]"
Output: false


Constraints:

1 <= s.length <= 104
s consists of parentheses only '()[]{}'.


풀이

 

class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        mapping = {")":"(", "}":"{", "]":"["}

        for char in s:
            if char in mapping.values():
                stack.append(char)
            elif char in mapping.keys():
                if not stack or mapping[char] != stack.pop():
                    return False
        
        return not stack



괄호 짝을 맞추는 문제입니다. 괄호로 이루어진 string이 괄호 짝이 맞지 않으면 false, 짝이 맞으면 true를 return해야 합니다.
우선 False일 경우는 두 가지로 정리됩니다.
1.  ) , }, ] 가 (, {, [ 보다 먼저 나왔을 경우

2. (, {, [  가 먼저 나왔지만, 바로 다음에 짝을 이루는 닫는 괄호라 나오지 않을 경우

이제 문제를 해결하기 위해서는
괄호별로 여닫는 기호를 mapping한 dictionary를 생성합니다.

예시답변에사는 닫는 괄호를 key, 여는 괄호를 value로 mapping 했습니다.

이제 string안의 각 문자를 순회합니다.
1. value(여는 괄호) 일 경우, 다음에 짝이 맞는 닫는 괄호가 나오는지 확인하기 위해 stack에 임시로 append 해놓습니다.

2. key(닫는 괄호)일 경우,
a. stack이 비어 있는지 확인합니다(닫는 괄호가 처음 나온 것이니 false)
b. mapping 되어 있는 짝이 stack에 있는 문자와 맞는지 확인합니다( 다르면 false)


stack을 만들어 string 의 각 문자를 하나씩 순회하며 dictionary와 비교하게 하면 됩니다.

stack은 Last in First Out 특징이 있습니다. .pop을 이용하야 마지막에 추가된 문자부터 꺼내어 비교하게 됩니다.





 

1. Facts (사실)

  • 이번 주에 어떤 일이 있었나요?
    • 2주만에 회사에 출근하여 온전히 업무를 진행함
    • 아이들에 이어 와이프 그리고 나도 아프게 됨
    • GCC 스터디 시작함
    • Delicious Korean 인터뷰 불합격 통보를 받음
    • 점심시간에 짧게나마 운동을 가기 시작함
    • 저녁에 앉아서 공부할 수있는 환경 세팅을 해놓음
  • 달성한 목표와 성취한 작업은 무엇인가요?
    • 챌린저스 통해 루틴을 설정한 것이 2주가 지나가고 있음
      • 100% 만족할 정도로 루틴을 잘 지키고 있지는 못하나, 루틴 설정하기 전보다는 변화된 삶을 살고 있음
    • GCC 스터디를 통해서 처음으로 behavioral interview, coding interview에 대해서 나만의 답변을 준비해봄
    • 주간 몸무게 -0.5kg 목표 달성

2. Feelings (감정)

  • 이번 주에 어떤 감정을 느꼈나요?
    • 긍정적 감정 (기쁨, 성취감, 자신감 등)
      • 아빠가 데이케어 센터에서 진행한 작은 작품들 (그림/퍼즐 등)을 카톡으로 보내주실 때마다 안도감이 듬
      • 저녁에 식탁에 앉아 laptop을 켜고 해야할 공부를 하는 스스로를 보며 뿌듯함이 듬
    • 부정적 감정 (스트레스, 불안, 좌절 등)
      • Delicious Korean 인터뷰에서 떨어진 점이 안타까웠음
        하지만, 운영진의 전화번호를 받았고, 지속적으로 커뮤니케이션 하기로 했으니, 계속 연락하고 나의 관심을 어필하고자 함
      • 공부할 것은 많은데, 100% 집중을 못하고 있으며, 아직 절박하게 dive in 하지 못하는 스스로를 보며 한심스러움
      • 회사에서 내가 공부한 것을 써보고, 이를 내 포트폴리오로 써야겠단 생각이 들면서도, 의지가 생기지 않음.

3. Findings (발견)

  • 이번 주에 무엇을 배웠나요?
    • Behavioral interview는 STAR method 이용하고, 최대한 많은 상황에 대해서 나만의 scriprt를 준비하는게 필요
    • Coding interview는 coding보다는, work flow에 대해서 설명을 하고, interviewer와 communication 하는 것이 중요
    • Time / space complexity의 개념에 대해서 이해를 하게 됨
  • 어떤 통찰이나 교훈을 얻었나요?
    • 현재 회사에서 DA의 role이 명확하게 나뉘어져 있지 않았음에 안타까워 했지만,
      작은 회사에서는 DA, BA, DS, DE 등의 role이 구분되어 있다기 보다는 한 사람이 모두 다 할 수도 있음을 깨달음.
    • 인재형님이 왜 자꾸 role을 구분하려 하느냐란 얘기를 했던 점이 다시 떠올랐고, 결국 나는 어떤 position으로도 나갈 수 있고, 1) 공부를 해서 지속적으로 역량을 쌓는 한편 2) 남은 7개월동안 현재 회사에서 포트폴리오를 최대한 만들어야 겠음
    • 현재 회사는 내가 인지하는 문제점이 많은 만큼, 그 문제점을 하나씩 해결해 나가면 좋은 포트폴리오가 될 것임

4. Future (미래)

  • 다음 주에 달성하고자 하는 목표는 무엇인가요?
    • Tell me about yourself script 완성 & 인재형님 feedback 요청하기
    • Delicious Korean 관련 coffee chat 요청하기
    • 챌린저스 루틴 업데이트
    • github 사용법 익히기
    • Kaggle 프로젝트 주제 선정하기
    • 선재가 제안한 프로젝트 (그림 업로드 & 미술치료 관련 분석) 구체화해보기
    • NIPA 프로젝트 코드 및 자료 다운로드
    • ACT GPT 활동 주제 정하기
  • 어떤 전략을 사용할 계획인가요?
    • 주간 시간표 작성

5. Feedback (피드백)

  • 스스로에게 주고 싶은 피드백은 무엇인가요?
    • 자신에게 칭찬할 점
      • 이번 주도 수고가 많았다. 다음주에는 더 나은 내가 되자
    • 개선이 필요한 점
      • 이번주는 가계부 작성하지 않았다 - 자동화할 수 있는 방법을 생각해보자
      • 시간표 작성해야 한다. 아직 시간 활용이 비효율적이다.
      • 식습관 조절 필요하고 운동 강도를 좀 더 높여야 한다.
      • 가족과 있을 때, 핸드폰 보는 시간을 줄이자.

'검비의 회고 > 주간 검비' 카테고리의 다른 글

주간 검비 : 24.08-W3  (1) 2024.08.27
주간 검비 : 24.07-W5  (0) 2024.08.05

출처

https://leetcode.com/problems/two-sum/description/

내용

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

 

Example 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].

Example 2:

Input: nums = [3,2,4], target = 6
Output: [1,2]

Example 3:

Input: nums = [3,3], target = 6
Output: [0,1]

 

Constraints:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • Only one valid answer exists.

 

Follow-up: Can you come up with an algorithm that is less than O(n2) time complexity?

 

풀이 - 1

List와 target이 주어진다. List 와 target은 모두 integer이다.

List 안에 있는 두 개의 숫자의 합이 target과 동일해지는 숫자의 index를 출력하는 문제이다.

조건은 동일한 index의 숫자는 반복 사용할 수 없단 것이다.

 

제일 처음 떠오른 방법은 for문을 이용해서 list 안의 숫자들을 모두 매칭해보는 것이었다.

(이걸 영어로는 brute force라고 표현하더라)

 

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)): # list 안의 숫자들을 순차적으로 돌린다
            for j in range(i + 1, len(nums)): # 동일 index 반복을 하면 안되니 i+1부터 돌린다
                if nums[j] == target - nums[i]: # target과 값을 비교한다
                    return [i, j] # index를 반환한다

 

Time complexity: .

바깥 루프 (for i in range(len(nums))): 이 루프는 n번 반복됩니다.
안쪽 루프 (for j in range(i + 1, len(nums))): 이 루프는 매번 n-i-1번 반복됩니다. 평균적으로 봤을 때, 대략 n/2번 정도 반복된다고 할 수 있어요.
따라서, 전체 반복 횟수는 n * (n/2)가 됩니다. 이를 간단하게 표현하면 약 n^2/2가 되는데, 빅오 표기법(Big-O Notation)에서는 상수를 무시하므로 **시간 복잡도는 O(n^2)**입니다.

 

Space complexity: O(1)

이 함수는 주어진 배열 nums와 몇 개의 변수(i, j 등)만 사용하고 있어요. 여기서 중요한 점은 추가적인 메모리 공간을 거의 사용하지 않는다는 점이에요. 리스트나 다른 데이터 구조를 새로 만들지 않으니까요.
따라서 이 함수의 공간 복잡도는 O(1)입니다.

 

풀이 - 2

첫번째 풀이는 Follow up question : "Can you come up with an algorithm that is less than O(n2) time complexity?"을 충족시키지 못한다.

이를 충족시키기 위해서는 Space complexity를 희생하여 hash map을 만들어준다.

Hash map은 {숫자 : index} 로 구성되고, target 에서 현재 숫자를 뺀 값이 hash map에 존재하는지 여부를 체크하여 없다면, 이번에 확인한 숫자와 index를 hash map에 저장한다.

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashmap = {} # 숫자 : index 형태의 dictionary
        for i in range(len(nums)): # list의 루프를 돈다
            complement = target - nums[i] # target에서 i번째 index의 숫자를 뺀다
            if complement in hashmap: # 위의 값이 hashmap에 있다면, 목표달성
                return [i, hashmap[complement]] # 이번 숫자의 index인 i와, 기존에 저장된 index를 출력한다
            hashmap[nums[i]] = i # 위의 조건이 부합하지 않으면, i번째 숫자 (num[i])와 index (i)를 hashmap에 저장한다

 

Time complexity: .

루프 (for i in range(len(nums))): 이 루프는 리스트 nums의 길이만큼 반복됩니다. 즉, n번 반복됩니다.
루프 내부에서는 다음과 같은 작업이 수행됩니다:

target - nums[i] 계산은 O(1) 시간 복잡도를 가집니다.
if complement in hashmap 체크도 일반적으로 O(1)입니다(해시맵에서 값을 찾는 시간은 평균적으로 상수 시간입니다).
hashmap[nums[i]] = i는 값을 해시맵에 저장하는 작업인데, 이것도 O(1) 시간 복잡도를 가집니다.

Space complexity: O(n)

해시맵에는 최대 n개의 키-값 쌍이 저장될 수 있습니다(nums 리스트의 모든 요소에 대해).
따라서 공간 복잡도는 해시맵에 저장되는 요소의 수에 비례하여 O(n)이 됩니다.

1. Facts (사실)

  • 이번 주에 어떤 일이 있었나요?
    • 월요일, 요양보호사 방문 기관 전화 돌림
    • 화요일을 마지막으로 NIPA 부트캠프 중단
    • 수요일, 가족들과 롯데월드 방문 
    • 금요일, 아빠 새로운 데이케어센터 계약
    • 토요일, 인재/용재 형님네와 콘스탄츠 식사 이후 도서관 방문, 저녁식사
    • 일요일, 부모님과 누나네와 함께 엄마 생신 식사, 이후 배스킨라빈스 디저트
  • 달성한 목표와 성취한 작업은 무엇인가요?
    • 챌린저스 통해 운동, 블로그, 학습 루틴 잡기 시작
    • 네이버 DS  코칭 스터디 시작
    • 알고리즘 공부 시작
    • 블로그 작성 시작
    • 인재 형님과의 대화를 통해  캐나다에서의 커리어 방향성을 정함 :  DS 쪽으로 커리어 준비

2. Feelings (감정)

  • 이번 주에 어떤 감정을 느꼈나요?
    • 긍정적 감정 (기쁨, 성취감, 자신감 등)
      • 루틴 잡기 위해서 다시 노력을 시작한 점에 대한 뿌듯함
      • 극적으로 아빠 데이케어센터 새로 구한 점에 대한 안도감
      • DS 코칭 스터디, 할만하다는 자신감
    • 부정적 감정 (스트레스, 불안, 좌절 등)
      • NIPA 부트캠프 중단으로 인한 좌절감
      • 아빠 데이케어센터 새로 구해야 한단 점에 대한 불안감
      • 알고리즘 EASY인데도 쉽지 않단 생각에 대한 좌절감
      • DS 커리어 준비를 하는것도 생각보다 쉽지 않을 것이란 불안감
      • 전반적으로 루틴을 완전히 유지하지 못하는 스스로에 답답함
  • 작업이나 목표를 달성하면서 느낀 감정은 무엇인가요?
    • 블로그 작성을 다시 시작하면서, 내가 생각이 너무 많음을 느낌.
      썸네일부터 구성까지 너무 완벽하게 쓰려고하다보니 작성하기 쉽지 않음.
      추가로, 이런 회고록을 오픈된 곳에 계속 작성하는 것이, 내 개인 정보를 노출하는건 아닌가 하는 걱정이 됨
    • DS코칭 스터디 1주차 미션을 진행하면서, 내가 처음부터 파이썬 기초를 다져나가면서 배웠으면 좋았을 것이란 생각이 드는 한편, 그랬다면 지금처럼 부족한 부분을 부분부분 채워 나가는 시원한 기분(?)을 느끼지 못했을 거란 생각이 듬

3. Findings (발견)

  • 이번 주에 무엇을 배웠나요?
    • Pandas Cheat sheet란 것이 있단 것을 알게 되었고, markdown, 파일 상대경로 등에 대한 걸 새로 배움
    • SQL database desing에 대한 경험을 함
  • 어떤 통찰이나 교훈을 얻었나요?
    • 이민 및 커리어 전환을 준비하면서 지금껏 내가 너무 안일하게 있었단 점을 깨달음.
      이제는 목표를 구체화하고, 현실적으로 step 을 밟아 나가야게다고 느낌. 이제 7개월 남음

4. Future (미래)

  • 다음 주에 달성하고자 하는 목표는 무엇인가요?
    • 챌린저스 목표 완수 (운동, 블로그, 학습)
    • DS 코칭스터디 미션 완수
    • GCC 스터디 완수
    • SQL 스터디 학습 완수
    • Tell Me About Youself script 초안 완수
  • 이번 주의 교훈을 바탕으로 다음 주에 어떻게 개선할 수 있을까요?
    • 오전 6시에는 일어나서 운동하기
    • 저녁 10시에는 무조건 자리에 앉기
    • 출퇴근 시간 활용하기
  •  

5. Feedback (피드백)

  • 스스로에게 주고 싶은 피드백은 무엇인가요?
    • 자신에게 칭찬할 점
      • 시작이 반이다. 
    • 개선이 필요한 점
      • 게을러지지 말고, 스스로를 너무 몰아치진 말고, 휴식과 학습을 명확히 구분해서 휴식에 따른 죄책감을 느끼지 말자
      • 가족과 보내는 시간에는 가족에게 집중하자

'검비의 회고 > 주간 검비' 카테고리의 다른 글

주간 검비 : 24.08-W3  (1) 2024.08.27
주간 검비 : 24.08-W1  (0) 2024.08.11

SQL 공부 시작하기

1. SQL이란 무엇인가?

SQL(Structured Query Language)은 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 관리하고 조작하기 위해 사용되는 표준 언어예요. SQL은 데이터를 삽입, 조회, 수정, 삭제하는 다양한 작업을 수행할 수 있답니다. 현대의 데이터 중심 세계에서 데이터베이스는 매우 중요한 역할을 해요. 예를 들어, 우리가 자주 사용하는 온라인 쇼핑몰에서는 상품 정보와 사용자 정보를 데이터베이스에 저장하고 관리해요. SQL은 이러한 데이터를 효율적으로 처리하는 데 꼭 필요한 도구예요.

2. 왜 SQL을 배워야 하는가?

데이터 분석가, 데이터 사이언티스트, 데이터 엔지니어와 같은 직업을 희망하신다면 SQL은 꼭 필요한 기술이에요. 이 직무들은 모두 데이터베이스와 밀접하게 관련이 있으며, 데이터를 효율적으로 관리하고 분석하기 위해 SQL을 사용하거든요.

  • 데이터 분석가: SQL을 사용해 데이터를 추출하고 분석해서 의미 있는 통찰을 도출해요. 예를 들어, 카페 매니저가 매출 데이터를 분석해 어떤 메뉴가 인기 있는지 파악할 때 SQL을 사용할 수 있어요.
  • 데이터 사이언티스트: SQL을 통해 데이터를 준비하고 전처리하며, 모델링 및 예측 분석에 필요한 데이터를 얻어요. 예를 들어, 날씨 데이터를 분석해 다음 주 날씨를 예측할 때 SQL을 사용해요.
  • 데이터 엔지니어: SQL을 사용해 데이터 파이프라인을 구축하고, 데이터베이스의 성능을 최적화하며, 데이터 저장소를 관리해요. 예를 들어, 스트리밍 서비스에서 사용자 시청 데이터를 실시간으로 저장하고 처리할 때 SQL을 사용해요.

SQL은 데이터의 정확성과 일관성을 보장하면서도, 대규모 데이터를 효율적으로 처리할 수 있게 해줘요. 따라서 데이터와 관련된 모든 직무에서 필수적인 기술로 간주돼요.

3. SQL의 주요 용도 및 응용 분야

SQL은 다양한 분야에서 사용돼요. 다음은 SQL이 사용되는 주요 용도 및 응용 분야입니다:

  • 데이터베이스 관리: 데이터베이스를 생성하고 구조화하며, 데이터를 삽입, 업데이트, 삭제하는 작업을 해요. 예를 들어, 도서관에서 책 정보를 데이터베이스에 저장하고 관리할 때 SQL을 사용해요.
  • 데이터 분석: 데이터를 조회하고 필터링해서 유의미한 정보를 도출해요. 집계 함수와 복잡한 쿼리를 사용해 데이터를 분석해요. 예를 들어, 온라인 쇼핑몰에서 매출 데이터를 분석해 어느 시기에 어떤 상품이 많이 팔리는지 파악할 때 SQL을 사용해요.
  • 웹 개발: 웹 애플리케이션에서 사용자 정보를 저장하고 관리하는 데 사용돼요. 예를 들어, 소셜 미디어 플랫폼에서 사용자 프로필과 게시물을 관리할 때 SQL을 사용해요.
  • 비즈니스 인텔리전스(BI): 대규모 데이터를 분석해 비즈니스 의사결정에 필요한 인사이트를 제공해요. BI 도구에서 SQL을 사용해 데이터를 추출하고 시각화합니다. 예를 들어, 마케팅 부서에서 고객 데이터를 분석해 타겟 마케팅 전략을 세울 때 SQL을 사용해요.
  • 데이터 시각화: 데이터 시각화 도구에서 SQL을 사용해 데이터를 준비하고 시각화해요. 예를 들어, 금융 보고서를 작성할 때 SQL을 사용해 데이터를 추출하고 그래프로 시각화해요.

4. 예시 코드

SQL을 실제로 사용해보는 것이 중요해요. 아래는 간단한 예제 테이블을 생성하고 데이터를 삽입한 후, 데이터를 조회하는 SQL 코드예요.

기본적으로 만들어져 있는 테이블에 데이터를 저장하고, 그 테이블이나, 저장된 데이터를 쿼리(query)를 통해 불러오고, 조작하는 방식으로 작동합니다.

 

아래 예시를 보시죠.

 

예제 테이블 생성

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Department VARCHAR(50),
    Salary DECIMAL(10, 2)
);

 

데이터 삽입

INSERT INTO Employees (EmployeeID, FirstName, LastName, Department, Salary) VALUES
(1, 'John', 'Doe', 'Engineering', 60000),
(2, 'Jane', 'Smith', 'Marketing', 55000),
(3, 'Mike', 'Johnson', 'Sales', 45000);

 

데이터 조회

SELECT * FROM Employees;

 

코드 수행 결과

 

EmployeeID FirstName LastName Department Salary
1 John Doe Engineering 60000
2 Jane Smith Marketing 55000
3 Mike Johnson Sales 45000

 

 

다음부터는 쿼리에 대해서 하나하나 자세히 포스팅 해보겠습니다.

1. Facts (사실)

  • 이번 달에 어떤 일이 있었나요?
    • 회사 사정은 어려워지고 있고, 옆에서 일하던 동료 한 명이 이직을 함
    • 아빠가 데이케어 센터에 가기 시작하셨으나 2주 사이에 적응에 실패하심
    • 아이들 모두 기관지염부터 수족구까지 걸려 지속적으로 아파 병원비만 80만원 이상 지출함
    • PY4E, SQL 등 기초 지식이 필요하다고 생각하는 부분의 강의를 수강함
    • 꿈꿔왔었던 오프라인 실무 프로젝트 부트캠프 (NIPA-GOOGLE) 에 참여해보았으나, 중도 포기하게 됨
    • Delicious Korean 코치 인터뷰를 봄
    • 1개월간 운동을 아예 하지 않았고 먹는 것도 신경쓰지 않아 살이 많이 찜
    • 모바일 게임과 웹툰으로 많은 시간을 허비함
  • 달성한 주요 목표와 성취한 작업은 무엇인가요?
    • 스터디클럽++, GCC, 네이버 DS코칭스터디 등 유사 관심사가 있는 사람들과의 온라인 스터디 클럽에 참여함
    • 블로그 세팅을 하고, 글 작성을 시작함 (이것이 첫 글)
    • 가계부 작성을 다시 시작함  
    • 와이프에게 실손보험 정산 하는 법을 알려주고, 지난 3년간 미뤄둔 정산을 진행함
    • 데일리 루틴을 잡기 위해 챌린저스를 다시 시작함 (5개, 각 20만원씩)
    • 캐나다 이민 이후 취업을 위한 멘토를 구함 (인재형님)

2. Feelings (감정)

  • 이번 달에 어떤 감정을 느꼈나요?
    • 긍정적 감정
      • Delicious Korean 인터뷰를 보면서 가장 기쁘고, 성취감도 들고 자신감도 생겼음.
        내가 유망하다고 생각하는 industry에, 내가 생각하는 것과 유사한 가치관을 가지고 운영을 하고 있는 운영진, 그리고 운영진의 AI 개발자 출신이라는 background가 향후 서비스가 발전하는 과정에서 내가 기여할 부분이 생길 수 있을 거란 기대감이 컸음.
        그래서 꼭 인터뷰를 진행하고 싶었고, 인터뷰 대상에 선정 되었다는 점이 무척 기뻤음.
        예상 외의 2:1 인터뷰였으나, 인터뷰 시간 내내 좋은 사람에게 좋은 에너지를 전달 받는 느낌을 받았음.
        특히 함께 인터뷰를 본 미야님의 일본어 뉴스레터를 구독하게 되었고, 나도 뉴스레터를 운영해보고 싶단 생각을 해보았음.
      • Routine을 잡기 위해서 챌린저스 세팅하고, 블로그 세팅하고, 스터디 참여를 준비하는 등에서는 뿌듯함이 듬. 특히 오랬동안 미뤄뒀던 기초 지식 관련되 PY4E, SQL 공부를 드디어 시작했으며, 크게 어려울게 없단 생각이 들어 자신감이 생김
    • 부정적 감정
      • 회사 사정이 안좋아지고, 동료가 이직하는 등의 상황이 답답함. '내가 아무리 열심히 해도 나아질 게 없을거 같은데, 무슨 동기로 열심히 해야하지?', '내년 3월에 이민 갈 거라서 딱히 좋은 고과 필요 없는데?' 란 생각이 들어서 의욕이 더 바닥으로 떨어짐
      • 아빠가 데이케어 센터를 예상보다 일찍 다니실 수 있게 되어서 기쁘고 안도했다가, 2주간의 적응에 실패하시게 되며 불안감과 스트레스가 극에 달함
      • NIPA-GOOGLE 부트캠프에 참여 해서 기대했던 것과 다른 커리큘럼에 실망이 컸음. 그래도 배우는 점이 있으며 해보고 싶었던 내용을 진행하는지라 지속했는데, 개인 사정으로 중도포기하게 되어 팀원들에 대한 죄책감이 있고, 스스로 약간의 패배감이 듬
      • 아이들이 오래 아팠고, 아빠의 데이케어 센터 관련된 이슈들이 계속 발생하다보니, 와이프와의 감정도 많이 좋지 못했음
      • 가계부 작성한 결과, 최초 목표보다 지출이 컸음. 와이프의 과외비가 있어 수입이 늘어서 다행이었으나, 미래에 대한 불안감이 생김
      • 개인 사정으로 인해 회사를 2주간 비우게 되니 누구도 눈치를 주는 것이 아니었으나 스스로 스트레스가 심했음. 내 책임을 져버리고 일상에서 벗어나 있었기에 느끼는 스트레스였던 것 같음

3. Findings (발견)

  • 이번 달에 무엇을 배웠나요?
    • SQL 기본 문법
    • Oracle DB 활용법
    • OpenAI API, Gemini API 사용법
    • Flask 사용법
  • 어떤 통찰이나 교훈을 얻었나요?
    • 건강이 최우선이다
    • 부모님이 조금이라도 더 건강하실 때 효도하자
    • 자기 관리 및 공부는 매일 한 걸음씩 꾸준히 쌓아나가야만 한다. 공든 탑이 무너지기 쉬우니 꾸준함이 생명이다.

4. Future (미래)

  • 다음 달에 달성하고자 하는 목표는 무엇인가요?
    • 참여하게 된 스터디 (SQL, DS알고, Kaggle, GCC, 네이버 DS) 모두 중도 포기하지 않기
    • 스터디하며 배운 점을 업무에 활용해보기
    • 꾸준히 운동하는 습관 및 좋은 식습관 들이기
    • 블로그에 학습한 내용과 회고 꾸준히 남기기
    • 위 내용과는 별도로 coursera 강의 1개는 별도로 수강해보기 (python or java or project)
    • 가능하면 google cloud certificate도 늦었지만 시작해보기
  • 어떤 전략을 사용할 계획인가요?
    • 하루 일과 및 주간 시간표를 작성
      • 오전 6시 이후 출근 전 
      • 출근 / 점심 / 퇴근 시간
      • 오후 9시 이후
    • 챌린저스 활용을 통한 강제성 및 동기 부여 (20만원 원금 보전 + 상금)

5. Feedback (피드백)

  • 스스로에게 주고 싶은 피드백은 무엇인가요?
    • 자신에게 칭찬할 점
      • 중도 포기했지만, 용기를 내서 부트캠프 참여 해본 것은 좋은 경험이었던 것 같다.
      • 스스로 시간 관리를 잘 못했기에 강제성을 부여할 수 있도록 각종 스터디 및 챌린저스 세팅한 점 잘했다.
    • 개선이 필요한 점
      • 부모님께 더욱 더 신경 잘 써드리자
      • 만화 보거나 게임하면서 시간을 버리지 말자. 하고싶은 게 많은만큼 시간 관리가 중요하다!
      • 시간관리를 잘 하려면 저녁은 소식하고, 운동해서 체력을 키우는게 필수다
  • 팀이나 동료에게서 받은 피드백은 무엇인가요?
    • Delicious Korean 인터뷰를 함께 본 미야님으로부터 '사람을 편안하게 해주는 사람'이란 평을 받았음. 인사치레일수도 있지만, '주변 사람이 뭐라 하느냐'란 인터뷰 질문을 받았을 때는 대답하기 어려웠음. 상대방을 편안하게 하는 커뮤니케이션 스타일을 가진 사람이 되어야겠단 생각을 함.
    • 회사에서는 내 개인 사정을 상사 및 동료들이 모두 편의를 봐줬기에 감사함.

목표1: 캐나다 이민 준비

  1. 집 마련
  2. 영주권 신청
  3. 자동차 계약
  4. 한국 이사나갈 준비
  5. 한국 자동차, 가구 등 자산 처분
  6. 육아휴직 준비

목표2: 이민후 안정적 수입 파이프라인 마련

  1. 취업
  2. Online freelancing
  3. Digital marketing
  4. 투자

목표3: 정신&마음 건강 되찾기

  1. 올바른 식습관
  2. 꾸준한 운동
  3. 루틴한 생활

+ Recent posts