본문 바로가기
카테고리 없음

20231127_TIL_{ 오전 : [ 프로그래머스 문제 풀이, Django ] , 오후 : [ 미팅 진행 ]

by sayhoon 2023. 11. 27.

프로그래머스 문제 - 과일 장수

github link

## 과일 장수
# 예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면,
# 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을 얻을 수 있습니다.

## 이익 계산식 : (최저 사과 점수) x (한 상자에 담긴 사과 개수) x (상자의 개수) = 2 x 4 x 1 = 8

def solution(k, m, score):
    answer = 0
    # 만들 수 있는 상자의 수 계산 
    max_box = len(score) // m

    # 정렬해서 m만큼 나눠주면 되지 않을까?
    score.sort(reverse = True)

    s_idx = 0
    for _ in range(max_box):
        # 최대이익 계산식 넣음
        cal_score = min(score[s_idx:s_idx + m]) * m
        # 더해줌
        answer += cal_score
        # slicing하기 위해서 시작 index를 지정해줌
        s_idx += m
    
    return answer

print(solution(3,4,[1,2,3,1,2,3,]))
print(solution(4,3,[4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2]))

 

Django 연습

- 강의 내용 중 github 에서 clone 하여 수업 진행

git reset --hard {commit_id}

위 명령어를 zsh에 입력해주면 clone한 repo에서 commit_id 시점으로 돌아가서 해당 시점의 폴더와 정보를 가져온다

Django의 User테이블을 가져오기 위해서 AbstractUser를 가져오는 경우

OnetoOneField를 만들어서 연결하는 경우가 있다. 

(둘이 동시에 사용하기도 한다.)

 

먼저 User class를 마이그레이션 하면 가능하다.

이후 User class로 마이그레이션 한 뒤에 UserDetail을 마이그레이션 하면 오류가 발생한다.

이렇게 오류가 발생하는 이유는 우리가 참조하고 있는 user Table이 없기 때문이다. 

왼쪽 : shortner folder내 models.py / 오른쪽 : shrinkers folder 내 setting.py

project폴더인 shirinkers foler에서는 shortner.User 테이블을 바라보고 있게 설정을 해뒀는데,

UserDetail에서 OneToOneField에서 연결 시킨 U는 django에서 만든 table을 바라보기 때문에 연결이 안된다고 한다.

(이후 강의에서 ORM을 하면서 이해가 될 거라고 하니 우선 Pass !!)

 

 

- MTV 디자인 패턴 [ Models.py , Urls.py(Template) , Views.py (Controller) ]
참조 사이트 : django MVT link

shortner app folder

Model

위 사진을 보면 models.py가 MTV패턴의 Model을 의미하며

DB에 저장되는 데이터들을 정의 하는 파일이다. 

하나의 class가 하나의 DB Table이라고 한다

 

DB를 조작하기 위해서는 SQL을 다룰 줄 알아야 하지만

Django는 ORM(Object Relational Mapping)기능을 지원하기 때문에 파이썬 코드로 DB를 조작할 수 있다.

Django내 models.py

 

Controller

Django에서는 app folder내 views.py로 정의를 한다. 

요청에 따라 적절한 로직을 수행하여 결과를 템플릿으로 렌더링하며 응답합니다.

항상 Template을 렌더링하는 것이 아니라, Backend로 데이터를 주고 받을 수도 있다.

아래 사진에서 네모박스는 django에서 지원하는 ORM이라고 한다.

Django내 views.py

Template

장고는 자체적인 Django Template 문법을 지원하며

이 문법 덕분에 html 파일 내에서 context로 받은 데이터를 활용할 수 있습니다.

project folder내 template folder 생성

** 주의사항 !

1. Template 렌더링 경로 설정

Template내에서 html 파일을 rendering하기 위해서 setting.py에서 TEMPLATES에서 DIRS를 설정해주어야 Rendering이 된다.

shrinkers/shrinkers/settings.py

 

2. redirect 할 때 넣어주는 인자 값은 views의 def 명이 아닌 urls.py의 urlpatterns의 path (name = '이거')이다 !

왼쪽 : 프로젝트 폴더 내 urls.py  // 오른쪽 : app 폴더 내 views.py 


오후 미팅

오후에는 지인을 만나서 미팅을 진행함.

같이 일 하기로 해서 당분간 Backend 및 Django FrameWork 공부는 못할 것 같음

 

NLP 및 추천 알고리즘 공부를 진행할 예정

블로그 글 올라오는 주기가 달라질 수 있을 것 같음

 

해당 일 마무리 잘해서 포트폴리오 잘 쌓아두자 !!