python 49

백준 10814 문제풀이

📌문제 설명 📌문제접근방식 enumerate함수를 이용해 회원별 번호를 매긴 뒤 나이순으로 정렬하면 된다고 생각했다. 만약 나이가 같다면 매겨둔 회원 번호로 정렬을 실시한다. 따라서 정렬의 기준를 2개로 설정했다. 📌문제풀이 1차 시도 실패한 이유는 다른 곳에서 발생했다. 입력받을 때 나이가 문자로 입력되었다. [(['21', 'Junkyu'], 1), (['21', 'Dohyun'], 2), (['20', 'Sunyoung'], 3)] 따라서 '21'과 '20'을 숫자로 바꿔주니 문제 없이 통과했다. 비교할 때는 반드시 비교하는 대상의 타입이 무엇인지 확인해야겠다. 소스코드 import sys n = int(sys.stdin.readline().rstrip()) input_list = [sys.stdi..

알고리즘 2021.03.20

enumerate함수(feat. 문자열비교)

📌enumerate란? enumerate함수는 enumerate 객체를 생성해주는 함수다. 그럼 enumerate 객체는 무엇일까? enumerate 객체는 순서 번호가 들어간 iterator 객체이다. 만약 반 학생들을 이름순으로 정렬한 뒤 각각 번호를 매긴다면 어떻게 해야할까? 이름순 정렬은 sort()나 sorted() 함수로 해결 가능할 것이다. 그런데 번호는 i=1부터 선언해서 각각 추가해 주어야 한다. 이를 간단하게 처리해주기 위한 함수가 enumerate 함수이다. student = ['Jihyeon', 'Andy', 'Chris', 'Songhye', 'Danny'] student.sort() enum_student = enumerate(student) for x in enum_studen..

map과 filter 함수 활용하기

📌map 함수 map 함수는 Iterable한 객체로부터 각각의 값을 꺼내 적용시킬 수 있는 함수이다. def power(x): return x**2 list1 = [1,2,3,4,5] squared = list(map(power, list1)) print(squared) # list1의 각각의 요소를 제곱한 값 출력 : 1,4,9,16,25 리스트 외에 튜플, 문자열과 같은 Iterable객체면 모두 전달이 가능하다. 📌슬라이싱 슬라이싱 시 세 번째 요소가 음수이면 꺼내는 방향이 바뀐다. list1 = ['one', 'two', 'three'] print(list(map(lambda x:x[::-1], list1))) # eno, owt, eerht print(list(map(lambda x:x[::-..

리스트 컴프리헨션으로 가독성 높이기

📌for문 대체하기 리스트를 정의할 때 for 루프를 대체하는 방식이다. 리스트에 1부터 100까지 for문으로 서넌 list1 = [] for i in range(1, 101): list1.append(i) 벌써 3줄이나 사용해야 한다. 리스트 컴프리헨션은 이를 대체할 수 있는 방법이다. list1 = [x for x in range(1,101)] 리스트 컴프리헨션을 더 쉽게 이해한 방법은 뒤의 for문을 먼저 작성하는 것이다. x를 1부터 100까지 loop를 돌고, 그 때마다 x를 리스트 요소에 추가한다. if문이 들어간 리스트 컴프리 헨션도 같은 방식이다. 📌if문 포함 만약 1부터 100까지 짝수만 리스트에 추가하고 싶을 땐 어떨까? list1 = [x for x in range(1,101) i..

백준 2164(카드분류2) 문제풀이

📌문제 설명 📌문제 접근 방식 첫 번째 시도 아무생각 없이 시도했다가 시간 초과가 떴다. 문제를 접근한 방식은 다음과 같았다. 1. 첫 번째 카드를 제거한다. 2. 두 번째 카드를 맨 뒤로 보낸다. 위 두 과정을 1장이 남을때까지 수행하면 되는 문제라고 생각했다. 따라서 리스트를 사용했고 맨 앞에 카드를 삭제하고 뒤로 보내도록 구현했다. 문제가 없을거라 생각했던 이유 두 가지이다. 1. 1중 for문을 사용했다. 2. 최대 가드 수가 50만장이다. 소스코드 # 2초 초과 - N 500000으로 대입 시 79초가 걸렸다. # 병목 지점은 어디지? import sys n = int(sys.stdin.readline().rstrip()) cards = [x for x in range(1,n+1)] def so..

알고리즘 2021.03.12

백준 1259번 : 팰린드롬이란?

📌문제 설명 팰린드롬이란? 팰린드롬이란 앞에서 읽으나 뒤에서 읽으나 똑같은 단어를 말합니다. 📌문제 접근 방식 이 문제는 입력받은 값을 문자열로 바꾼 뒤 뒤집어주기만 하면 되는 간단한 문제였습니다. 📌문제 해결 및 소스코드 import sys def solution(): while True: input_value = str(sys.stdin.readline().rstrip()) if input_value == '0': break target_value = input_value[::-1] if input_value == target_value: print("yes") else: print("no") return 0 solution()

알고리즘 2021.03.09

Visualization 코로나 데이터 분석하기

📌First Topic 코로나 종식? 줄어든 관심, 그러나 늘어나는 해외발 확진자 https://dacon.io/competitions/official/235590/codeshare/934?page=1&dtype=recent&ptype=personal 📌Second Topic "인구"관점 시각화 업데이트 https://dacon.io/competitions/official/235590/codeshare/959 📌Third Topic 코로나 정책은 과연 효과가 있었을까? https://dacon.io/competitions/official/235590/codeshare/1003 by Team Signal-9

Logistic Regression - 당뇨병예측

로지스틱 회귀를 활용해 피마 인디언 당뇨병을 예측해보려고 합니다. UCI Machine Learning에서 제공하는 피마 인디언 당뇨병 데이터를 갖고 Classfication 실습을 해보았습니다. https://archive.ics.uci.edu/ml/index.php 📌데이터 수집 및 전처리 코드는 Colab에서 작성하였고 Drive에 csv파일을 올려두었습니다. 필요한 라이브러리들을 모두 불러와줍니다. 데이터 처리를 위한 Pandas, Numpy 시각화 라이브러리 plotly 머신러닝 프레임워크인 sklearn 교차 검증을 위한 cross_val_score, KFold 평가를 위한 accuracy_score, precision_score, recall_score import pandas as pd i..

맥주 추천시스템 구현 - 7. 웹 구현하기(Django)

🔨URL 설정하기 우선 프로젝트 폴더의 urls.py를 수정합니다. 현재 프로젝트 이름은 myproject입니다. ''로 경로가 없으면 beer 앱의 경로로 넘어갑니다. from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('', include('beer.urls')), ] 이번엔 beer 앱의 urls.py를 수정합니다. '' 경로로 접근 시 views.py의 index 함수를 실행합니다. ver1, ver2 역시 마찬가지로 views.py의 ver1, ver2 함수를 실행합니다. from django.urls import path fr..

맥주 추천시스템 구현 - 6. 웹 설정하기(Django)

🔨패키지 설치 및 환경설정 구현한 추천시스템을 웹으로 구현하고 배포까지 진행해보려고 합니다. 에디터는 Pycharm을 사용했고 Django로 구현할 예정입니다. New project 선택 후 새로운 프로젝트를 생성합니다. Django와 Pandas, scikit-learn 패키지를 가상환경에 설치합니다. 명령어를 터미널에서 실행합니다. pip install django pip install pandas pip install scikit-learn 그리고 새로운 프로젝트를 생성합니다. 프로젝트 이름은 myproject로 지었습니다. 디렉토리에 myproject 폴더가 추가되었습니다. 프로젝트를 처음 생성했으므로 다음 명령어로 database를 초기화 시켜주겠습니다. manage.py 파일을 사용하기 위해 ..