AI 부트캠프 - Django의 기초

Cookie Baking·2024년 12월 12일

AI 부트 캠프 TIL

목록 보기
32/42

연속된 부분 수열의 합 (출처 : 프로그래머스)

🧚

  • 연속된 부분 수열인데 그 합이 k와 같아야 하며 부분 수열 가운데에서도 그 간격이 가장 작고 짧은 것을 구하는 것이 최종 목적이다.

  • sequence의 길이가 1,000,000 이기 때문에 시간복잡도를 반드시 고려했어야 했고
    O(n)을 넘어가서는 안되었었다.

  • 때문에 부분 수열의 합을 계산함에 따라 바로바로 k와 비교했어야 했다.

  • 최종 answer 배열을 출력할 때에도 주의가 필요했는데 1. 같은 인덱스도 first, second에 구분해서 들어갈 것 2. 그 interval이 가장 짧은 것이 들어갈 것

헷갈렸던 부분

  • first, second의 초기값 설정
  • 마지막에 interval을 sequence 배열을 진행함에 있어서 초기화를 하지 않는 이유

📌

First Attempt

def solution(sequence, k):
    answer = []
    candi = []
    
    for i in range(len(sequence)):
        
        if sequence[i] == k:
            candi.append((i, i))
            break
        
        tmp = 0
        for j in range(i, len(sequence)):
            tmp += sequence[j]
            if tmp == k:
                candi.append((i, j))
                break
                
    # print(candi)
    
    interval = 1000
    for can in candi:
        
        if can[0] == can[1]:
            answer = []
            answer.append(can[0])
            answer.append(can[1])
            return answer
        
        else:
            between = can[1] - can[0]
            if between <= interval:
                if len(answer) > 0 and answer[0] < can[0]:
                    continue
                interval = between
                answer = []
                answer.append(can[0])
                answer.append(can[1])
                
    return answer

Answer

def solution(sequence, k):
    end = 0; interval = 0; first = 1; second = 1000001
    
    for i in range(len(sequence)):
        
        while end < len(sequence) and interval < k:
            interval += sequence[end]
            end += 1
        
        if interval == k:
            if (end-1) - i < second - first:
                first = i
                second = end-1
            
        interval -= sequence[i]
    return [first, second]

ERD 특강

  • 서비스 제작 전에 ERD를 만들어보자
  • 개체들은 여러 개의 데이터를 찍어낼 수 있음
  • 사각형 : 개체
  • 원 : 속성
  • 마름모 : 관계
  • fk, pk는 유일성이 보장되는 관계에서 선정해야 함

작성 FLOW

  • 개체 정의
  • 속성 정의
  • 관계 정의

Django

내가 전역 환경을 쓰고 있는지 가상환경을 쓰고 있는지 확인하려면
pip list

장고 설치
pip install django==4.2

LTS
안정버전 확인할 것

django-admin startproject <생성할 프로젝트 명>
django-admin startproject . # 현재 디렉터리를 프로젝트 디렉터리로 사용하겠다는 소리

python manage.py runserver

settings.py - 프로젝트의 설정을 관리하는 곳
urls.py - 어떤 요청을 처리할 지 결정하는 곳
__init__.py - 하나의 폴더를 하나의 파이썬 패키지로 인식하도록 하는 파일
wsgi.py - 웹 서버 관련 설정 파일
manage.py - Django 프로젝트 유틸리티 (조종기)

Django의 APP

  • 하나의 프로젝트는 여러 개의 앱이 있을 수 있음
  • 여러 개의 앱으로 나누어 개발하는 것을 권장

FLOW

  • 앱 생성하기
python3 manage.py startapp articles
  • 앱 등록하기
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'articles',
]

등록한 APP 구성

  • admin.py - 관리자용 페이지 관련 설정
  • apps.py - 앱 관련 정보 설정
  • models.py - DB 관련 데이터 정의 파일
  • tests.py - 테스트 관련 파일
  • views.py - 요청을 처리하고 처리한 결과를 반환하는 파일

Django -> 동적 웹페이지 (요청을 받아서 적절한 응답을 만들어주는 주체)

MVC 디자인 패턴

  • Model : 데이터와 관련된 로직을 관리
  • View : 레이아웃과 관련된 화면을 처리
  • Controller : Model 과 View를 연결하는 로직을 처리

장고의 MTV 디자인 패턴

  • Model : 데이터와 관련된 로직을 처리
  • Template : 레이아웃과 화면상의 로직을 처리
  • View : 메인 비지니스 로직을 담당, 클라이언트의 요청에 대해 처리를 분기하는 역할 (DB도 조회하고 외부로 요청하기도 하고 응답을 만들어서 클라이언트에게 전달도 하는 역할)


Django Template Language

  • 변수 : 1순위
- {{ variable }}
- view의 context로 넘긴 데이터를 접근할 수 있음
- .을 사용하여 변수의 속성값에 접근 가능
- render()의 세 번째 인자인 context에 dict 형태로 넘겨진 데이터 중 key 값이 template에서 사용 가능한 변수가 됨
  • 필터
- 변수에 어떠한 작업을 추가적으로 더해 수정하고 싶을 때 사용
  • 태그 : 2순위
- 반복 또는 논리를 수행하여 제어 흐름을 만들거나 특수한 기능을 수행
- 일부는 시작 태그와 종료 태그가 있음
- 파이썬 코드가 안쪽에 들어가는 것이 아님 -> 그저 문법에 해당하는 것임 
  • 주석

0개의 댓글