[python/AI] Python 외부 라이브러리 설치 및 관리 총정리
·
ML
ML 관련 프로젝트를 하다보면 외부 라이브러리 관리가 까다로움을 느낀다.Python을 통해서 다양한 작업을 수행할 수는 있지만, 다양한 연산을 지원하는 라이브러리 관리도 필수적이다.pip파이썬 라이브러리를 관리해주는 프로그램이다. 파이썬의 다양한 라이브러리를 사용하기 위해서는 pip가 필요하다. pip는 파이썬으로 작성된 라이브러리를 관리해주는 시스템으로, 파이썬 관련 명령어에 다양하게 활용된다. MacOS 유저는 brew, 우분투/리눅스 유저들은 apt와 비슷하다고 생각하면 된다. pip는 Python 2.7.9 이후 버전, Python 3.4 이후 버전에는 내장되어있으므로 따로 설치할 필요가 없다. pip vs pip3pip: Python2 버전 패키지 매니저pip3: Python3 버전 패키지 매니..
[백준/1032] 명령 프롬프트 | 문자열 비교
·
PS/BOJ&Programmers
명령 프롬프트 알고리즘문자열 비교 알고리즘이다.이런 문제를 풀 때는 모든 보기를 다 비교해야 할지, 일부로도 해결이 가능한지 판단한다.어차피 N의 범위가 적으니까 할 수 있는 건 다 해서 풀어낸다.전체 코드내가 작성한 코드import sys; input=sys.stdin.readlinen=int(input())file=[input() for _ in range(n)]tmp=[]for i in range(n): for j in range(i+1, n): if file[i] != file[j]: a = file[i] b = file[j] for k in range(len(a)): fo..
[백준/1009] 분산 처리 | 반복되는 숫자 어떻게 효율적으로 처리할까
·
PS/BOJ&Programmers
 분산 처리 알고리즘승수의 마지막 자리 반복001122 4 8 633 9 7 144 6556677 9 3 18 8 4 2 699 1 수의 끝자리만 가져오는 두 가지 방법문자열 활용 a = str(a) a = int(a[-1])나머지 활용(%10, %100, %1000, ....)a %= 10 # 끝 한 자리만a %= 100 # 끝에서부터 2개전체 코드import sys; input=sys.stdin.readlinet=int(input())for _ in range(t): a,b = map(int,input().split()) a = str(a) a = int(a[-1]) if a == 1 or a == 5 or a == 6: print(a) # 4 번씩 반복..
[백준/10158] 개미 | 점화식 그게 뭔데 그거 어떻게 하는 건데
·
PS/BOJ&Programmers
10158 개미  알고리즘t의 범위가 1 ≤ t ≤ 200,000,000이므로 완전탐색을하면 타임아웃이다.그렇다면 어떤 점화식을 세워서 문제를 풀어야 한다는 건데 1. x와 y의 독립성이 문제는 1초의 시간이 지날 때 x = (x+1) or (x-1)이 되고y = (y+1) or (y-1)이 된다.따라서 각각의 값이 독립적으로 움직인다는 결론에 도달할 수 있다.  2. 이동 횟수와 이동 거리의 관계 x좌표와 y좌표는 각각 t만큼 이동을 하게 되고, 이 이동 주기가 2*w, 2*h이다.아래와 같은 그래프를 보면 이해가 쉽다.따라서 이동 자체에 대한 점화식은 다음과 같다.(p+t) % 2*w(q+t) % 2*h이제 이동 좌표에 관한 점화식을 얻었으니, 거리를 구하면 된다. 거리는 수학적으로 뺄셈을 의미하기도..
[개발 일지] 프로젝트 성능 최적화 | 원하는 폴더에 python package 함께 설치하고 AWS Lambda에 zip 파일 올리기 1편
·
회고 & 후기/개발 일지
냉시피 프로젝트의 모든 API 개발과 배포가 완료되었다. 이후 개발 마무리 회의에서 내가 구현한 Recipe API의 성능 최적화 작업을 시작하기로 했다. 성능 최적화를 고민한 이유 성능 최적화 전 Recipe API 로직은 다음과 같다. GET 요청이 들어오면 Crawling 함수를 실행하여 "만개의 레시피" 사이트 크롤링 database Recipe Entity의 recipe_name column을 확인하여 중복되지 않은 경우 크롤링 정보 db에 저장 사용자가 저장한 재료(Ingredient Entity)와 저장된 Recipe 목록(Recipe Entity)을 비교하여, 사용자가 저장한 재료를 기반으로 레시피 목록을 출력 위와 같이 postman, nengcipe 서버 모두에서 api가 잘 작동하는 ..
[Docker] MariaDB 도커 이미지와 PyMySQL로 쿼리 작성하기
·
DevOps/Docker
개요지금까지 Docker image mariadb, DBeaver mariadb를 사용하여 database를 다루는 환경을 세팅하고, 쿼리문을 작성해보았다. RDBMS 마지막 시간에서는 python으로 mysql을 다루는데, 이러한 방법이 있는줄 몰랐고 생소한 내용이어서 기록해두기로 하였다.   환경 세팅우선 Docker 컨테이너 접속하여 가상환경 전원을 켜준다.개발 환경은 docker container와 visual studio code를 활용하였다. 사용할 도커 컨테이너를 터미널에서 작동시키고, vsc를 통해 접속하면 된다.위 화면은 아직 가상환경 접속 전 상태이므로 오른쪽에 로컬에서 사용했던 코드가 보인다가상환경에 접속하기 위해 원하는 컨테이너에 오른쪽 마우스를 클릭한 뒤, Attach Visual..
[알고리즘] 다익스트라 알고리즘
·
PS/Algorithm
다익스트라다익스트라는 음의 가중치가 없는 그래프의 한 정점에서 모든 정점까지의 최단거리를 구하는 알고리즘이다.bfs, dfs처럼 원리를 통해 특정 경로, 비용 등을 계산하는 알고리즘이다. 최단경로(출발, 도착, 비용)**이때 cost는 양의 가중치, 유향 그래프 특징1. 시작점이 주어진다.2. 시작점을 출발지로 [INF] * (n+1)로 초기화된 node의 가중치 정보를 갱신하며 그래프 탐색을 한다.3. 이때 노드들을 방문하면서 python heapq를 사용하여 노드 번호와 가중치를 체크하면 최단거리를 찾을 수 있다.4. graph는 i번째 노드에서 j번째 가는 가중치(w)를 저장해야 하므로 이차원 리스트로 구현한다.  구현 방법구현은 python heapq를 활용한다. python의 우선순위 큐.원소들..
[백준/1238] 파티 | 다익스트라 | 왕복 거리 계산 |
·
카테고리 없음
https://www.acmicpc.net/problem/1238 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 지금까지 풀었던 다익스트라 문제들에서 약간 응용된 부분이 있는 문제다. 다익스트라는 bfs, dfs처럼 원리를 통해 특정 경로, 비용 등을 계산하는 알고리즘이다. 따라서 이 원리에 대해서 잘 이해하고 어떻게 쓰는지 외우며 다양한 문제를 풀어보면 크게 어려울 것 없다. 일단 dfs, bfs를 공부할 때와 마찬가지로 어떤 원리를 가지고 있고, 이 원리를 코드로 어떻게 구..
[JAVA] JAVA String | StringBuilder | 문자열 결합 연산 | 문자열 연산의 복잡도
·
언어/JAVA
문자열 연산 최적화 산학 프로젝트 냉시피 개발 중 내가 크롤링한 값을 저장하기 위해 어떤 자료형을 쓸 지 많이 고민을 했는데, 그 과정 중 알게된 java StringBuilder에 대해 정리해보려고 한다. 처음에는 크롤링값: [재료이름, 재료수량]을 Map으로 묶어서 리스트로 저장을 하려고 했다. 하지만 걱정되었던 것이 1. 크롤링 자동화가 안되었는데 복잡도가 O(n)이면 성능 상 좋지않다.(크롤링 시 N=6만을 넘고, 그 이상이 될 확률이 매우매우 높은 상황.) 2. 이걸 도메인으로 구현을 해야하는데 어떤 column 값에 리스트를 어떻게 저장할까 였고, 이 문제를 해결하기 위한 조사를 통해 StringBuilder라는걸 알게 되었다. 결론적으로 [재료이름, 재료수량]을 하나의 문자열로 결합해야 한..
[개발 일지] 도커 컨테이너에서 웹 개발하기 (1)
·
회고 & 후기/개발 일지
오픈소스 강의 4주차부터 도커를 배우기 시작했다. 이전 4, 5 주차까지는 도커 사용법과 개념에 대해 배웠다면 중간고사 이후 9, 10주차는 응용을 하는 것을 배웠다. 이 응용 내용이 [도커 컨테이너에서 web 개발하기]이다. 우선 컨테이너 사용을 위해 도커 컨테이너를 생성하고, 이를 호스트와 마운팅해준다. 도커 컨테이너의 저장소 도커 컨테이너의 저장소는 외부와 단절되어 있으며 컨테이너가 삭제될 때 같이 삭제된다. 이와 같은 특성 때문에 컨테이너가 삭제되어도 데이터를 보관할 수 있는 영구 저장소가 필요하다. 또한 외부와 단절되어 있기에 이 컨테이너가 외부와 데이터를 주고 받기 위한 저장소도 필요하다. 따라서 도커는 다음과 같은 2가지 영구 저장소 사용 방식을 제공한다. 도커 볼륨 바인드 마운트 호스트와 ..
맥북 꿀팁 | Finder 경로
·
카테고리 없음
Finder에서 하나하나 경로확인하기 너무 귀찮다 도커 컨테이너랑 호스트랑 매핑하면서 계속 경로를 확인해줘야함. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=funmac&logNo=221440977778 맥북 파인더 사용법 기초#3 - 경로 표시 및 세부적인 파일 위치를 표시해보자 macOS에서 파인더를 사용하다면 숨겨진 기능이 너무 많아 사용자들이 좀 이해가 안되는 부분들이 많이 있... blog.naver.com 단비같은 글 발견! 3줄 요약 defaults write com.apple.finder _FXShowPosixPathInTitle -bool true; killall Finder 명령어를 terminal에 입력하면 ..
[Archive] 개발을 잘한다는 건 어쩌면.. 소프트웨어 공학 유심히 좀 들을걸 | 산학 프로젝트 중간 발표 후기
·
회고 & 후기/회고 & 후기
산학 프로젝트를 하고서 소프트웨어 공학의 중요성을 많이 느낀다. 산학 프로젝트란?KAU sw학과인이 꼭 거쳐야 하는 졸업 필수 과정우리 학교 소프트웨어학과는 3학년 때 산학 프로젝트 - 4학년 캡스톤(종합설계)로 총 2번의 큰 프로젝트를 수행해야 졸업을 할 수 있다.나는 현재 3학년이고 1학기에 산학 프로젝트 수강을 선택했다.내가 개발을 할 수 있을까..? 이런 생각이 컸어서 많이 고민을 했었는데 대부분 그냥 해라! 라고 했었고결정적으로 이정도 자세면 나도 할 수 있겠는데라는 생각으로 그냥 도전했다. 확실히 배운 건 정말 많다. 배운 게 많다는 건 그만큼 충돌과 난관이 많았다는 뜻이기도 하다........ 결론지금까지 제대로된 프로젝트를 해본 적이 없어서 몰랐는데 어떤 한 프로젝트를 성공적으로 완수하기 ..
sebinChu
Studying IT with cobinding