Contents 1. 문제🔥 링크: https://www.acmicpc.net/problem/14719 2차원 세계의 높이 H와 W가 주어지고, 그 다음 줄에는 각 열에 블록이 몇개씩 쌓여있는지가 주어집니다. 위 블록 이미지는 아래 예제 입력 2의 이미지 입니다. 고일 수 있는 빗물의 양을 출력하는 문제 입니다. 1) 예제 입출력❄️ 2. 핵심 논리☢️ 핵심은 각 블록에 대해서, 왼쪽과 오른쪽을 탐색해 두 방향 모두에서 더 높은 블록에 둘러 쌓여있으면 빗물이 고이는 것을 이용하는 것입니다. 자기를 둘러싼 왼쪽과 오른쪽 블록 중 더 낮을 블록까지 빗물이 고이는 것을 이용합니다. 3. 풀이 코드✅ H,W=[*map(int,input().split())] blocks=[*map(int,input().split..
Contents 1. 문제🔥 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42885 쉽게 말하면, 구명보트의 제한 무게에 맞춰 최대한 2명씩 태워서 구명보트의 개수를 최소화해서 출력하는 문제입니다. 1) 예제 입출력❄️ people = [70, 50, 80, 50]이고, limit = 100 일 때, 몸무게가 70, 80인 사람은 혼자 태워 보내고, 50인 사람 2명을 태워 보내면 필요한 구명보트의 최소 개수는 3개입니다. 2. 핵심 논리☢️ 주어진 people 리스트를 정렬하고, 리스트의 첫 번째 인덱스(0)와 마지막 인덱스(len(people)-1)에 포인터를 설정해서 그 합이 limit 초과일 때와 limit 이하일 때 구명보트에 2..
이번엔 네이버 부스트캠프 AI Tech 4기에 참여하면서 온보딩 키트를 받게되어 리뷰해보겠습니다. Contents 1. 온보딩키트의 구성 boostcamp 박스와 검은색 귀여운 가방이 왔습니다~~ 1) boostCamp 박스의 구성 부스트캠프 박스에는 맛있는 과자여러개, 부스트캠프 1주차부터 22주차까지 진행되는 일정표, 여러가지 스티커들, 부캠생활을 잘하기 위한 여러가지 팁들, 웰컴메시지 카드로 구성되어 있습니다. 2) 일정표 일정표는 세워서 넘길 수 있는 구조로 되어있고, 아래처럼 각 주마다 일정과 스페셜 이벤트들의 요일 이 적혀있습니다. 3) 스티커 그 외에 귀여운 스티커들이 왔습니다~ 읽어주셔서 감사합니다.
Contents 1. 배경 M1 맥북에서 Pytorch를 이용해 딥러닝 모델을 학습할 때, CPU를 사용하는 것보다 GPU를 사용하면 매우 빠르게 학습을 할 수 있습니다. 이번에 PyTorch가 1.12 버전으로 업데이트되며 M1 Mac에서도 GPU 연산을 지원합니다. 그 방법을 알아보도록 하겠습니다. 2. 해결 방법 1️⃣ PyTorch 최신 버전 설치 # conda 이용 pytorch 최신 버전 설치 conda install -c pytorch pytorch # pip 이용 설치 python -m pip install torch 현재(22.10.03) 기준 pytorch 최신버전은 1.12.1 버전입니다. 1.12.0 이상이면 괜찮습니다. 2️⃣ device에 적용하는 코드! device = torc..
Contents 1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42883 쉽게 말하면 number(문자열)과 k(정수)가 주어졌을 때, number에서 k개의 숫자를 뺐을 때 만들어지는 가장 큰 수를 출력하라는 것입니다. 1) 예제 입출력 number="1924"이고, k=2 일 때, 1과 2를 빼서 "94"를 만든 게 가장 큰 수입니다. 2. 핵심 논리⚡️ 풀이의 핵심 논리는 맨 앞자리수가 클수록 숫자는 커진다는 점을 이용합니다. 스택을 이용해서 맨 앞자리부터 순차적으로 수를 하나씩 검사하며, 앞자리 수를 가능한 크게 만드는 선에서 k개의 숫자를 제외시키는 것입니다. 3. 풀이✅ 1) 코드 def solution(number, ..
Contents 1. 배경 파이 토치에서 tensorboard를 통해 학습 그래프, Metric, 학습 결과를 시각화할 수 있는 기능을 제공해 줍니다. 주피터 노트북 상에서 해당 텐서 보드를 볼 수 있는데, Tensorboard를 실행하려고 보니 아래와 같은 에러가 나는 경우가 있습니다. TypeError: entry_points() got an unexpected keyword argument 'group' * 출력 화면 이를 해결하는 방법을 알아보겠습니다. 2. 해결 원인은 Tensorboard가 주피터 노트북에서 표현될 때 의존적인 markdown의 버전이 낮기 때문입니다. 아래 처럼 markdown을 다시 설치하고, 셀을 다시 시작하면 됩니다. # 주피터 노트북에서 ## conda 이용시 !con..
Contents 부스트캠프 AI tech 4기를 진행한 지 1주가 지났습니다. 슬랙에는 정말 많은 채널과 Tip들 그리고 자유롭게 채널을 생성하고 정보 공유를 하며, 스터디도 구하고 공유하는 문화가 잘 갖춰져 있습니다. 특히 운영진들과 멘토 조교님들이 활발하게 공유문화를 장려해서 캠퍼분들도 열정 있게 적극적으로 임하는 느낌입니다. 이번 포스팅에선 1주 동안 배운내용과 부스트캠프의 이벤트들을 간략히 정리하고자 합니다. 1. 강의 내용 1) Python 1️⃣ Python 기초 1~2 강에 걸쳐, 파이썬의 설치부터 환경설정(conda)과 기초적인 변수, 조건문, 반복문, string 관련 메소드들을 배웠습니다. 한 가지 특이했던 점은 함수에서 전역 변수에 있는 리스트를 호출해서 값을 변경하면 전역 변수에 있..
Contents 1. 배경 장고에서 User역할을 하는 app을 따로 생성한 뒤, SignUp을 CreateView를 상속받아 사용할 수 있습니다. 이때, form_class로 UserCreationForm을 이용하면 아래와 같은 [Manager isn't available; 'auth.User' has been swapped for 'accounts.User'] 에러가 발생합니다. 원인과 이를 해결하는 방법을 알아보겠습니다. 2. 해결 1) 원인 저는 User를 accounts라는 app으로 새로 만들었습니다. settings.py에 AUTH_USER_MODEL = "accounts.User" 도 잘 추가해 줬습니다. 그런데 SignUpVIew에서 form_class로 사용하는 UserCreationF..
Contents 1. 배경 장고에서 데이터를 불러오는 방식은 ORM의 Lazy-Loading을 기본으로 하고 있습니다. 이는 데이터가 필요한 시점에, 알맞은 쿼리를 최적화해서 DB에 날리는 방식입니다. 일반적으론 이 최적화가 잘 작동해서, 알아서 최소한의 쿼리만 날립니다. 하지만, 몇몇 경우에서 N번 쿼리를 더 날리게되는 N+1 문제가 발생합니다. N+1 문제의 예시를 보겠습니다. 첫째로, 다른 테이블의 데이터에 접근할 때, 이미 쿼리를 날렸는데, 원하는 정보가 없는 경우 N번에 걸쳐 반복하며 쿼리를 날리게 되는 경우입니다. 또 다른 예로는, N개의 데이터에 대해 명시하지 않은 필드에 접근할 때도 처음에 쿼리를 날리고, 이후에 필드가 없다 보니 N번에 걸쳐 추가적인 쿼리를 날리는 문제를 의미합니다. 이 ..
# 콘솔창에서 SQL 쿼리 보기 LOGGING = { "version": 1, "disable_existing_loggers": False, "handlers": { "console": { "level": "DEBUG", "class": "logging.StreamHandler", }, }, "loggers": { "django.db.backends": { "handlers": ["console"], "level": "DEBUG", }, }, } Contents 1. 배경 장고에서는 DataBase API로 ORM을 쓰기 때문에 실제 사용할 때, SQL 쿼리가 어떻게 동작하는지 알고 싶은 경우가 많습니다. 특히 특정 기능에서 속도가 느린 경우, SQL 쿼리가 어떻게 되는지 먼저 확인하면 매우 좋습니다. ..
Contents 1. 배경 장고에서는 다양한 방법으로 로그인한 유저만 허용하도록 할 수 있습니다. 예를 들어, 커뮤니티 웹사이트에서 글 목록까진 볼 수 있지만, 글을 보려면 로그인해야 볼 수 있게 할 수 있습니다. 이는 장고의 View단에서 구현됩니다. 유저가 로그인했는지를 판단하는 3가지 방법을 알아보겠습니다. 2. 방법 1) request.user로 판단 def index(request: HttpRequest) -> HttpResponse: if not request.user.is_authenticated: return redirect("/accounts/login/") qs = Post.objects.all() return render(request, "blog/index.html", context..
Contents 1. 배경 장고에서는 기본적으로 User Authentication 즉, 유저 인증 시스템을 가지고 있습니다. 이를 간단히 활용하여, 로그인 로그아웃을 구현해보겠습니다. 2. 해결 1) accounts app 만들기 python manage.py startapp accounts 2) settings.py에 등록 INSTALLED_APPS에 추가해줍니다. 3) urls.py에 path include 가장 루트의 urls.py(저의 경우 mysite/urls.py)에 path 객체를 추가해줍니다. include 함수에 "accounts.urls"를 해주게 되면, accounts 폴더 내부의 urls.py를 자동으로 읽어옵니다. 4) accounts/urls.py 생성 + 로그인 뷰 간단 구현..