[F-lab 모각코 챌린지 49일차] TIL

JeongheeKim·2023년 7월 19일

TIL

목록 보기
49/66

학습계획


  • 개구리책 7장
  • 프로세스 우선순위
  • 알고리즘

Today I Learned


스프링 프레임 워크는 자바 객체를 직접 관리한다. 소멸과 같은 라이프 사이클을 관리하며 스프링으로 부터 필요한 객체를 얻는다.

스프링은 POJO기반의 프레임 워크이며, 주요 모듈인 IoC, DI, AOP, PSA를 지원한다.

IoC,DI - 제어의 역전/의존성 주입

프로그래밍에서 의존성이란?

  • new Car(); → Car객체에서 new Tire(); → 의존성은 new다.
  • Car 클래스와 Tire 클래스 사이에서 Car 클래스가 Tire 클래스에 의존한다.
  • 전체가 부분에 의존하는 경우가 발생
    • 집합관계
      • 부분이 전체와 다른 생명 주기를 가질 수 있다.
    • 구성관계
      • 구성관계
        • 부분은 전체와 같은 생명 주기를 갖는다.
  • 주입
    • 외부에서라는 뜻을 내포하고있다.

CPU 스케줄링

💡 학습목표 - 프로세스 우선순위 이해 - 스케쥴링 큐의 개념과 필요성 학습 - 선점형 스케쥴링과 비선점형 스케쥴링의 차이를 이해 - 다양한 CPU 스케쥴링 알고리즘 학습

운영체제가 프로세스 들에게 공정한 CPU자원을 배분하는 것을 CPU 스케줄링 이라고 한다.

프로세스 우선순위

프로세스 종류마다 입출력 장치를 이용하는 시간과 CPU를 이용하는 시간의 양에는 차이가 있다.

전자의 작업을 입출력 집중 프로세스, 후자를 CPU집중 프로세스라고한다.

입출력 집중 프로세스는 수행 속도가 오래걸려 CPU집중 프로세스보다 먼저 처리하는 것이 효율적이다.

이러한 경우처럼 CPU의 자원을 차례대로 사용하기보다는 각각의 상황에 맞게 CPU를 배분한다.


스택과 큐

  • 스택
    • 처음 위치로 돌아가기 위해 사용하는 구조
    • 스택을 복잡한 형태로 자주 사용하면 덱 자료구조 사용, 단순 넣고 빼는 기능만 쓰면 배열 사용
    • BFS 한 번의 탐색에 다음 탐색이 두개 이상 발생
      • 큐에 일의 순서대로 넣어서 처리
    • Deque
      • append()
      • appendleft()
      • pop() : 오른쪽 요소를 제거 하고 해당 요소 반환 / popleft()
      • rotate(n=1) : n단게 오른쪽으로 회전, n이 음수이면 왼쪽으로 회전
        • 큐의 크기는 유지, 한 칸씩 이동하고 밀려난 요소는 빈곳으로 이동
      • 기본 개념과 풀이 방법 일치

DP

이미 얻은 답을 활용하여 다음 답을 구하는 방식

구현해야할 기능이 겹치거나 특정 범위를 반복적으로 호출하는 구조

조금씩 겹치는 구조를 갖는다면 해당 범위의 결과를 따로 저장하여 나중에 다시 계산하지않게 최적화

  • 완전탐색의 문제점

  • 완전탐색은 비용이 높고 조금만 경우의 수가 많아져도 시간이 오래걸린다.

  • 동적 프로그래밍 핵심, 메모이제이션

  1. 최적 부분 구조
    1. 작은 문제에서 최선의 선택을 했을때 최종결과 역시 최선의 선택인 경우
    2. 독립성을 지녀야하는 부분
  2. 중복되는 부분
    1. 하나의 큰 문제를 여러개의 문제로 쪼갤 때, 반복적으로 등장하는구조
  • 피보나치

def solution(n):
    answer = [0] * (n) #크기가 n이고 값이 0인 배열을 생성
    answer[0] = answer[1] = 1
    return answer[-1] % 1234567

def fibo(n,answer):
    if n < 2: return 1
    if answer[n] == 0:
        answer[n] = fibo(n -1, answer) + fibo(n-1, answer)
        # n번째 피보나치 수를 구하기 위해 n-1과 n-2번째 수를 더하는것
    return answer[n]
def solution(n):
    answer = [0] * (n) #크기가 n이고 값이 0인 배열을 생성
    answer[0] = answer[1] = 1
    for i in range(2,n):
        answer[n] = answer[n-1]+answer[n-2]
    return answer[-1] % 1234567

0개의 댓글