티스토리 뷰

728x90

CS 지식

  • 학습 목적
    • 효율적인 코드를 작성할 수 있습니다! CS 지식을 통해 알고리즘과 자료구조를 이해하고 최적화된 코드를 작성하는데 도움이 됩니다!
    • 문제 해결 능력을 강화 시킬 수 있습니다! CS 지식은 문제 해결에 대한 다양한 접근법을 제공하고, 이로 인해 저희가 개발자로서 겪을 다양한 문제들을 효과적으로 해결할 수 있습니다!
    • 기술적 도전과 성장에 도움이 됩니다! CS 지식을 통해서 새로운 기술에 대한 이해와 적응력을 향상 시킬 수 있습니다! 매일 매일 새로운 기술이 나오는 시장에서 발전하는 경쟁력있는 개발자가 되는 열쇠가 됩니다!
    • 커뮤니케이션 및 협업에도 도움이 됩니다! CS 지식을 알고 있음으로 인해 효과적인 팀 작업에 도움이 됩니다!
    • 실제 현업에서도 CS 지식은 중요합니다! 현업에서는 기술적 지식과 역량을 요구하며, CS 지식은 이러한 요구사항들을 충족시키는 데 중요한 역할을 합니다!!
  • 학습 목표
    • CPU의 구성, 동작, 성능에 대해 설명할 수 있습니다.
    • 메모리에 대해 설명할 수 있고, 캐시 메모리가 무엇인지 알고 있습니다.
    • CPU와 메모리의 동작과 구조에 대해 이해하고 있습니다.
    • 프로세스와 쓰레드의 차이를 알고 있습니다.
    • 프로세스 생명주기에 대해 설명할 수 있습니다.
    • 쓰레드 풀에 대해 설명 할 수 있습니다 (장단점, 이유, 쓰레드 풀이란..등등)
    • 동시성과 병렬성을 알고 있습니다.
    • 데이터베이스(DB)에 대해 이해하고 있습니다.
    • 데이터베이스(DB)의 유형들에 대해 설명할 수 있습니다 (SQL, NoSQL)
    • 이진수, 비트, 바이트의 개념을 이해하고 있습니다.
    • 자료구조의 종류를 모두 알고 설명할 수 있습니다.
    • 네트워크의 기본구조에 대해 알고 설명할 수 있습니다.
    • OSI 7계층에 대해 알고 설명할 수 있습니다. (계층별 설명 가능)
    • TCP / IP에 대해 이해하고 있습니다
    • HTTP / HTTPS가 무엇인지 알고 차이점을 설명할 수 있습니다.
    • 컴퓨터 구조에서 공간 자원이 무엇인지 알고 설명할 수 있습니다.
    • 공간 복잡도가 무엇인지 알고, 공간자원을 잘 사용하기 위해서 공간 복잡도를 어떻게 계산하는지 알고 있습니다.
    • CPU, 메모리, 네트워크의 시간자원이 무엇인지 알고 설명할 수 있습니다.
    • 시간 복잡도가 무엇인지 알고, 자료구조와 알고리즘을 기준으로 시간 복잡도를 계산하는 법을 알고 있습니다.

 

 

 

 

 

 

오늘의 개념

1-4~1-6강

1-4

  • 프로세스와 스레드
    • 프로그램을 실행하면 프로세스
    • 프로세스는 1개 이상의 스레드로 이루어짐
      • 스레드가 작업을 처리하는 주체
    • 멀티 프로세스 vs 멀티 스레드 차이점
      • 멀티 프로세스 : 서로 독립된 주소공간 가짐
      • 멀티 스레드 : 스택을 제외하고 주소공간(데이터, 힙, 코드 영역) 공유
        • 동기화나 교착상태(Deadlock) 발생 가능
      • 동기화나 교착상태 등의 문제가 일어나는데 멀티 스레드를 사용하는 이유?
        • context switching에 드는 비용(시간)이 적기 때문에 효율적→ 자원 효율성 증대, 처리 비용 감소, 응답 시간 단축
        • (stack 영역만 처리해주면 됨)
  • 동기화 문제
    • 해결방법- 상호배제
      • 뮤텍스, 세마포어, 락 이용
        • critical section, mutex, semaphore, lock 개념에 대해서 공부한다면 좋을듯! (여유가 된다면)
  • 교착상태(데드락)
    • 두개 이상의 프로세스(스레드)가 서로가 가진 자원을 무한히 기다리게 되는 현상t1 : 프로세스1이 자원1을 얻음 / 프로세스2가 자원2를 얻음
    • t2 : 프로세스1은 자원2를 기다림 / 프로세스2는 자원1을 기다림
    • 프로세스1과 2가 자원1, 2를 모두 얻어야 한다고 가정해보자
    • 해결 방법(여유가 된다면)

1-5

  • 데이터베이스
  • 관계형 데이터베이스 vs 비관계형 데이터베이스(NoSQL)
    • 관계형 데이터베이스
      • 테이블로 이루어져있으며 테이블 사이의 연관관계를 규정
      • 연관관계 종류
        • 1:N
        • M:N
        • 1:1
    • NoSQL
      • ex) MongoDB , Redis, DynamoDB .. 등
      • 종류마다 특화된 기능이 다름
      • 대용량 데이터 처리에 적합
      • 구조가 명확하지 않은 경우 사용
      • 데이터의 구조가 변경되거나 확장될 것이 예상되는 경우
  • SQL
    • 관계형 데이터베이스에서 사용되는 질의형 언어
    • SQL문 종류
      • DDL(Data definition Language)
        • CREATE - 테이블 생성
        • ALTER - 테이블 변경
        • DROP - 테이블 삭제
      • DML
        • SELECT - 데이터 조회
        • INSERT - 데이터 삽입
        • UPDATE - 데이터 수정
        • DELETE - 데이터 삭제
      • DCL
        • GRANT - 권한 부여
        • REVOKE - 권한 회수
        • COMMIT - 트랜잭션 적용
        • ROLLBACK - 트랜잭션 취소
    • 요즘은 ORM 많이 사용
      • ORM을 사용한다해도 SQL 기본원리는 알아야!
      • 객체의 개념으로 코드에서 SQL문을 구현하는 것
      • 복잡한 쿼리에서는 사용할 수 없다.

1-6

  • DBMS란?
    • 데이터베이스를 조작하고 관리하기 위한 별도의 소프트웨어
    • ex) MySQL, Oracle, MariaDB 등..
  • 키(key)
    • 관계형 데이터베이스에서 나오는 개념
    • 주키(Primary Key-PK) - 1,2,3,4 or UUID(보안상)
    • 외래키(Foreign Key-FK) - 관계를 가진 테이블의 PK
    • ERD
  • 트랜잭션(Transaction)
    • 하나의 논리적 기능을 수행하기 위한 작업 단위
    • 필요한 이유
    • 특성 - ACID
      • Atomicity(원자성)
      • Consistency(일관성)
      • Isolation(독립성)
      • Durability(지속성)
      • → 각 특성 설명할 수 있을 정도로 외우기
    SQLD(SQL 개발자)
    • SQL 관련 자격증
    • 5.25(토)에 다가옴
    • 합격한다면 내배캠측에서 응시료 지원
    • 준비해보는것도 추천!오늘의 개념1-4
      • 프로세스와 스레드
        • 프로그램을 실행하면 프로세스
        • 프로세스는 1개 이상의 스레드로 이루어짐
          • 스레드가 작업을 처리하는 주체
        • 멀티 프로세스 vs 멀티 스레드 차이점
          • 멀티 프로세스 : 서로 독립된 주소공간 가짐
          • 멀티 스레드 : 스택을 제외하고 주소공간(데이터, 힙, 코드 영역) 공유
            • 동기화나 교착상태(Deadlock) 발생 가능
          • 동기화나 교착상태 등의 문제가 일어나는데 멀티 스레드를 사용하는 이유?
            • context switching에 드는 비용(시간)이 적기 때문에 효율적→ 자원 효율성 증대, 처리 비용 감소, 응답 시간 단축
            • (stack 영역만 처리해주면 됨)
      • 동기화 문제
        • 해결방법- 상호배제
          • 뮤텍스, 세마포어, 락 이용
            • critical section, mutex, semaphore, lock 개념에 대해서 공부한다면 좋을듯! (여유가 된다면)
      • 교착상태(데드락)
        • 두개 이상의 프로세스(스레드)가 서로가 가진 자원을 무한히 기다리게 되는 현상t1 : 프로세스1이 자원1을 얻음 / 프로세스2가 자원2를 얻음
        • t2 : 프로세스1은 자원2를 기다림 / 프로세스2는 자원1을 기다림
        • 프로세스1과 2가 자원1, 2를 모두 얻어야 한다고 가정해보자
        • 해결 방법(여유가 된다면)
      1-5
      • 데이터베이스
      • 관계형 데이터베이스 vs 비관계형 데이터베이스(NoSQL)
        • 관계형 데이터베이스
          • 테이블로 이루어져있으며 테이블 사이의 연관관계를 규정
          • 연관관계 종류
            • 1:N
            • M:N
            • 1:1
        • NoSQL
          • ex) MongoDB , Redis, DynamoDB .. 등
          • 종류마다 특화된 기능이 다름
          • 대용량 데이터 처리에 적합
          • 구조가 명확하지 않은 경우 사용
          • 데이터의 구조가 변경되거나 확장될 것이 예상되는 경우
      • SQL
        • 관계형 데이터베이스에서 사용되는 질의형 언어
        • SQL문 종류
          • DDL(Data definition Language)
            • CREATE - 테이블 생성
            • ALTER - 테이블 변경
            • DROP - 테이블 삭제
          • DML
            • SELECT - 데이터 조회
            • INSERT - 데이터 삽입
            • UPDATE - 데이터 수정
            • DELETE - 데이터 삭제
          • DCL
            • GRANT - 권한 부여
            • REVOKE - 권한 회수
            • COMMIT - 트랜잭션 적용
            • ROLLBACK - 트랜잭션 취소
        • 요즘은 ORM 많이 사용
          • ORM을 사용한다해도 SQL 기본원리는 알아야!
          • 객체의 개념으로 코드에서 SQL문을 구현하는 것
          • 복잡한 쿼리에서는 사용할 수 없다.
      1-6
      • DBMS란?
        • 데이터베이스를 조작하고 관리하기 위한 별도의 소프트웨어
        • ex) MySQL, Oracle, MariaDB 등..
      • 키(key)
          • 관계형 데이터베이스에서 나오는 개념
          • 주키(Primary Key-PK) - 1,2,3,4 or UUID(보안상)
          • 외래키(Foreign Key-FK) - 관계를 가진 테이블의 PK
          • ERD
          • CS 지식
            • 학습 목적
              • 효율적인 코드를 작성할 수 있습니다! CS 지식을 통해 알고리즘과 자료구조를 이해하고 최적화된 코드를 작성하는데 도움이 됩니다!
              • 문제 해결 능력을 강화 시킬 수 있습니다! CS 지식은 문제 해결에 대한 다양한 접근법을 제공하고, 이로 인해 저희가 개발자로서 겪을 다양한 문제들을 효과적으로 해결할 수 있습니다!
              • 기술적 도전과 성장에 도움이 됩니다! CS 지식을 통해서 새로운 기술에 대한 이해와 적응력을 향상 시킬 수 있습니다! 매일 매일 새로운 기술이 나오는 시장에서 발전하는 경쟁력있는 개발자가 되는 열쇠가 됩니다!
              • 커뮤니케이션 및 협업에도 도움이 됩니다! CS 지식을 알고 있음으로 인해 효과적인 팀 작업에 도움이 됩니다!
              • 실제 현업에서도 CS 지식은 중요합니다! 현업에서는 기술적 지식과 역량을 요구하며, CS 지식은 이러한 요구사항들을 충족시키는 데 중요한 역할을 합니다!!
            • 학습 목표
              • CPU의 구성, 동작, 성능에 대해 설명할 수 있습니다.
              • 메모리에 대해 설명할 수 있고, 캐시 메모리가 무엇인지 알고 있습니다.
              • CPU와 메모리의 동작과 구조에 대해 이해하고 있습니다.
              • 프로세스와 쓰레드의 차이를 알고 있습니다.
              • 프로세스 생명주기에 대해 설명할 수 있습니다.
              • 쓰레드 풀에 대해 설명 할 수 있습니다 (장단점, 이유, 쓰레드 풀이란..등등)
              • 동시성과 병렬성을 알고 있습니다.
              • 데이터베이스(DB)에 대해 이해하고 있습니다.
              • 데이터베이스(DB)의 유형들에 대해 설명할 수 있습니다 (SQL, NoSQL)
              • 이진수, 비트, 바이트의 개념을 이해하고 있습니다.
              • 자료구조의 종류를 모두 알고 설명할 수 있습니다.
              • 네트워크의 기본구조에 대해 알고 설명할 수 있습니다.
              • OSI 7계층에 대해 알고 설명할 수 있습니다. (계층별 설명 가능)
              • TCP / IP에 대해 이해하고 있습니다
              • HTTP / HTTPS가 무엇인지 알고 차이점을 설명할 수 있습니다.
              • 컴퓨터 구조에서 공간 자원이 무엇인지 알고 설명할 수 있습니다.
              • 공간 복잡도가 무엇인지 알고, 공간자원을 잘 사용하기 위해서 공간 복잡도를 어떻게 계산하는지 알고 있습니다.
              • CPU, 메모리, 네트워크의 시간자원이 무엇인지 알고 설명할 수 있습니다.
              • 시간 복잡도가 무엇인지 알고, 자료구조와 알고리즘을 기준으로 시간 복잡도를 계산하는 법을 알고 있습니다.
      • 트랜잭션(Transaction)
        • 하나의 논리적 기능을 수행하기 위한 작업 단위
        • 필요한 이유
        • 특성 - ACID
          • Atomicity(원자성)
          • Consistency(일관성)
          • Isolation(독립성)
          • Durability(지속성)
          • → 각 특성 설명할 수 있을 정도로 외우기
        SQLD(SQL 개발자)
        • SQL 관련 자격증
        • 5.25(토)에 다가옴
        • 합격한다면 내배캠측에서 응시료 지원
        • 준비해보는것도 추천!

 

 

 

 

오늘의 개념

1-7~1-8강

Hash Table(맵)

  • 키와 값의 쌍의 형태로 저장하는 자료구조
  • 해쉬 함수 : 키에 대해 산술 연산을 이용해 데이터 위치를 찾아낼 수 있는 함수
  • 연산의 평균 시간복잡도가 O(1)로 데이터 저장 및 읽기 처리 속도가 매우 빠르다.
  • 해쉬 테이블 충돌 → 여러 개의 키 값이 해시 함수를 통해 같은 해시 값을 갖는 경우
  • 해결법
    • chaining : 충돌이 발생할 시 연결리스트 자료구조를 이용해서 충돌을 해결하는 방법
    • open addressing : 충돌이 발생하면 빈 버킷을 찾아서 데이터를 저장하는 방법.
      • 선형 탐색 (linear probing) : 충돌이 발생하면 해당위치부터 순차적으로 버킷을 하나하나씩 탐색
      • 제곱 탐색(Quadratic probing) : 충돌이 발생하면 해당 위치부터 제곱만큼 떨어진 다음 버킷을 탐색
      • 이중 해시 (Double hashing) - 충돌이 발생하면 다른 해시 함수를 한번 더 적용
    • 파이썬에서는 딕셔너리 자료형 사용
      • 파이썬에서는 충돌 발생시 체이닝이 아닌 오픈 어드레싱 방식 사용
      • hash table 자료구조 시간복잡도
        • 탐색, 저장, 삭제 O(1) → 매우 효율적

 

Set

  • 가장 중요한 특성 : 중복을 허용하지 않는다.
  • ex)
    print(set([1,2,2])) #{1, 2}​
  • 데이터를 비순차적으로 저장한다(삽입 순서대로 저장되지 않는다)
  • 연산 (mutable)
  • my_set=set() 
    
    my_set.add(1) 
    my_set.add(2) 
    my_set.add(3) 
    
    my_set.remove(2) 
    print(my_set) #{1,3}
  • +) 파이썬에서 immutable한 자료구조
    1. 튜플
      • 변하지 않는 값을 묶을 때 사용
      my_tuple = (1, 2, 3, 4)
      print(my_tuple)  # 출력: (1, 2, 3, 4)
      
      # 튜플은 값을 변경할 수 없기 때문에 다음과 같이 작업을 시도하면 에러가 발생합니다.
      my_tuple[0] = 5  # TypeError: 'tuple' object does not support item assignment
      
      
    2. 문자열 
      • my_string = "Hello" 
        print(my_string) # 출력: Hello 
        
        # 문자열은 값을 변경할 수 없기 때문에 다음과 같이 작업을 시도하면 에러가 발생합니다. 
        my_string[0] = 'J' # TypeError: 'str' object does not support item assignment
  • set의 집합 연산
  • set1 = {1, 2, 3, 4} 
    set2 = {3, 4, 5, 6} 
    
    # 합집합 
    union_set = set1 | set2 
    print(union_set) # 출력: {1, 2, 3, 4, 5, 6} 
    
    # 교집합 
    intersection_set = set1 & set2 
    print(intersection_set) # 출력: {3, 4} 
    
    # 차집합 
    difference_set = set1 - set2 
    print(difference_set) # 출력: {1, 2}
  • set 자료구조 시간복잡도
    • 파이썬에서는 세트가 hash table로 구현되어 있어서 x in s 연산을 수행할 시 O(1)의 시간복잡도를 가짐
    • (리스트에서는 O(n)
    • 추가,삭제 연산 O(1)

 

알고리즘 문제

https://www.acmicpc.net/problem/2579

백준 계단오르기 (dp)

https://www.acmicpc.net/problem/11722

가장 긴 감소하는 부분 수열(dp)

 

 

 

스키마란?

스키마(Schema)는 데이터베이스에서 데이터 구조, 데이터베이스의 구조, 데이터베이스 테이블의 필드와 타입 등을 정의하는 것을 말합니다. 스키마는 데이터베이스의 설계도와 같은 역할을 합니다. 스키마는 데이터베이스 내의 테이블들이 가질 수 있는 컬럼(열)과 해당 컬럼의 데이터 타입, 제약 조건 등을 정의합니다. 스키마를 통해 데이터베이스의 구조와 제약 조건을 명확히 정의할 수 있으며, 이를 통해 데이터의 일관성과 무결성을 유지할 수 있습니다. 데이터베이스의 스키마는 데이터베이스 관리 시스템(DBMS)에 따라서 다르게 정의될 수 있습니다.

 

 

 

 

 

[20240321]

 

예상 질문

  • DNS란 무엇인가요?
  • TCP와 UDP의 차이점이 무엇인가요?
  • HTTP와 HTTPS의 차이점이 무엇인가요?
  • HTTP의 각 메소드에 대해 설명해주세요.
  • IP주소와 MAC주소에 대해서 설명해주세요.

문제 풀이(dp)

  • 계단 오르기
  • N=int(input()) #계단의 개수 
    arr=[] 
    
    for i in range(N): 
    	arr.append(int(input())) 
        
    #[1] 
    dp=[0 for i in range(N)] #dp[i] : i번째 까지 고려했을 때 얻을 수 있는 점수의 최댓값 
    
    if N<3: 
    	#계단이 1개또는 2개 
        print(sum(arr)) 
        quit() 
        
    dp[0] = arr[0] 
    dp[1] = arr[0] + arr[1] 
    dp[2] = max(arr[2]+arr[1],arr[2]+arr[0]) 
    
    for i in range(3,N): #0부터 N-1 
    	#현재 계단을 밟는다면 
        #1) 전계단 + 전전전계단 
        #2) 전전계단 
        dp[i]=max(dp[i-3]+arr[i-1]+arr[i],dp[i-2]+arr[i]) #두 가지 경우를 비교해서 i번째 경우 갱신 
        
    print(dp[N-1]) #dp[-1]

 

 

 

 

  • 가장 긴 감소하는 수열
  •  
N=int(input()) #수열의 크기 

arr=list(map(int,input().split())) 
dp=[1 for i in range(N)] #dp[i] : i번째까지 고려했을 때 가장 긴 (감소하는 부분)수열의 길이 

for i in range(N): #비교의 시작점 
	for j in range(i+1,N): 
    	if arr[i]>arr[j]: #감소한다면 
        	dp[j] = max(dp[i]+1,dp[j]) #최대 길이를 갱신 시켜줌 
            
print(dp) 
print(max(dp))

 

 

 

 

 

 

 

 

반응형
반응형
TAG
more
최근에 올라온 글