목록파이썬 (38)
훈훈훈

이번에는 알고리즘 유형 중 하나인 스택에 대해 정리 해보려고 한다. 문제 유형으로는 숫자로 이루어진 문자열에서 m개의 숫자를 제거할때 가장 큰 수를 출력하는 문제를 선택하였다. # 풀이 과정 입력 받은 m개의 숫자 만큼 반복문을 돌리면서 제거할 숫자를 탐색해야 한다. 탐색하기 위한 가장 좋은 방법은 아래와 같이 "7' 이라는 숫자를 예를 들어 설명하자면, 7 앞에 있는 4와 2는 7 보다 작은 숫자 이기 때문에 제거할 수 있다. 즉, 연속된 두 인덱스의 숫자를 비교하여 크면 stack에 담고 작으면 pop 시킬 수 있다. 이러한 과정을 m번 만큼 반복한 후 최종 stack을 return 시키면 된다. 위 과정대로 m번 만큼 반복이 되어서 깔끔하게 정답이 나올 수 있지만, 예외적으로 리스트의 길이 만큼 탐..

이번에는 알고리즘 유형 중 이분 검색에 대해 정리하려고 한다. 문제 유형으로는 숫자로 이루어진 문자열을 Input으로 받은 후 오름차순으로 정렬하여 특정 숫자의 인덱스 값을 반환하는 문제이다. # 풀이 과정 먼저 입력받은 문자열을 sort 메서드로 오름차순으로 정렬한다. 그 다음 아래 그림과 같이 첫 인덱스를 Left 그리고 마지막 인덱스에 Right를 설정한다. 그리고 Left와 Right의 평균 값을 Middle로 설정한다. 그 후 Middle 값이 찾고자 하는 숫자와 같은지 비교 후 같으면 Middle 값의 인덱스를 리턴하고, 그게 아니라면 Middle과 크기 비교 후 Middle이 크면 Left = Middle + 1 로 설정하고 그게 아니라면 Right = Middle -1 로 설정한다. 그리고..

이번에는 탐색 유형 중 하나인 회문 문자 검사(대소문자를 구분하지 않음) 유형에 대해 정리해보려고 한다. 회문 문자는 문자를 뒤로 뒤집어서 읽어도 같은 문자열이며, 문자열 중앙을 기준으로 대칭인 특징이 있다. 따라서 해당 유형의 알고리즘을 풀떄도 이러한 특징을 이용해서 풀어보려고 한다. # 풀이 과정 먼저 대소문자를 구분하지 않기 때문에 리스트에 있는 모든 요소들을 대문자 혹은 소문자로 변환하는 작업이 필요하다. 필자는 " .lower() " 메서드를 사용하여 모두 소문자로 변환하였다. 그 다음 아래와 같이 대칭되는 요소들을 비교하였다. Input으로 주어지는 문자열의 길이를 2로 나눈 후 그 횟수 만큼 아래와 같이 비교하면 된다. 문자열이 홀수로 주어지더라도 가운데 값은 비교하는데 의미가 없기 때문에 ..
이번에는 회원가입 시 입력 값을 체크하는 함수를 정리하려고 한다. 먼저, 회원가입 시 이메일과 패스워드만 입력 받는다는 가정하에 진행하려고 한다. 아래 코드를 살펴보면 validate_special_char는 이메일 입력 값을 그리고 validate_password 는 패스워드 입력 값을 검증하는 함수이다. 이메일 검증을 하는 함수 이름에 char 단어를 넣은 이유는 해당 함수는 실행 시키기 이전에 이메일 형식인지 검증해주는 모듈을 먼저 실행 시킨 후 해당 함수를 이용해 @ 앞에 있는 입력 값에 대한 검증을 진행할 목적으로 만들었기 때문이다. 해당 함수를 살펴보면 정규표현식으로 알파벡 소(대)문자 그리고 숫자 이외에는 허용하지 못하도록 작성하였다. 그 다음 패스워드를 검증하는 validate_specia..

이번 포스팅은 장고(Django)로 회원가입 시 인증 이메일을 보내는 API Code를 정리 해보려고한다. 회원가입 API 기반으로 작성하기 때문에 회원가입/로그인에 관한 자세한 내용은 아래 링크를 참고 바란다. https://wave1994.tistory.com/65?category=872868 API 구현하기에 앞서 Gmail SMTP(Simple Mail Transfer Protocol)을 사용하기 위해 아래와 같은 설정을 하였다. # 사전 설정 1. IMAP 설정 - 이메일 클라이언트에서 Gmail을 사용할 수 있게 IMAP 설정을 1단게로 설정한다. https://support.google.com/mail/answer/7126229?hl=ko&rd=3&visit_id=1-6362818115668..
# 업비트 Open API 이용 - Example URL : https://crix-api-endpoint.upbit.com/v1/crix/candles/기간단위/기간?code=CRIX.UPBIT.마켓-암호화폐기호&count=데이터수&to=최종시세데이터일시 # 스크랩핑 코인 종류 - BTC, ETH, BSV 등등 # 과거 데이터 크롤링 - 1분, 3분 5분, 1일, 1주 단위 등등 # Pandas 활용하여 csv 파일로 output import requests import pandas as pd from bs4 import BeautifulSoup coin_list = ['BTC', 'ETH', 'BSV', 'XRP', 'BCH', 'EOS'] time_units = ['days', 'weeks'] mi..
이번에는 python 코드를 이용하여 데이터베이스에 csv파일을 넣는 방법을 작성하려고한다. 이번 글에서는 생성한 앱에서 City 라는 클래스를 임포트 후 해당 테이블에 데이터를 넣는 작업을 위한 코드를 작성하였다. 아래 코드를 사용하면 데이터는 물론 foreign key 까지 모두 넣을 수 있다. 단, foreign key에 데이터를 넣기 위해서는 테이블 칼럼명에 "_id"를 붙여줘야 넣을 수 있다. import csv import os import django os.environ.setdefault("DJANGO_SETTINGS_MODULE", "[ProjectName].settings") django.setup() from [AppName].models import City CSV_PATH = '/..
Django 프레임 워크로 작업 시 마이그레이션을 할때마자 001, 002 등등의 변경 내역이 저장된 파일이 생성되고 해당이 DB에 반영되는 된다. 가끔 혼자 작업 하다 DB를 밀어버리는 상황이 발생하거나, git으로 팀원이 작성한 코드를 불러올 때 001, 002로 시작하는 파일들이 꼬여버려서 에러가 발생하는 경우를 종종 볼 수 있는데 이때 해결하는 방법은 "_ _ init _ _"파일을 제외한 모든 파일을 날려버리면 깔끔하게 애러 없이 실행시킬 수 있다. find . -path "*/migrations/*.py" find . -path "*/migrations/*.py" -not -name "__init__.py" -delete python manage.py makemigrations python m..