전체 글 89

[한개라도 제대로] DFS&BFS(1) - 백준 2178번 미로 탐색

문제 링크: https://www.acmicpc.net/problem/2178 풀이 1. 논리적인 순서 확정 입력1: 미로를 만들기 위한 행(N), 열(M)의 수 입력2: 줄바꿈(개행문자)을 기준으로 행의 수(N)만큼 추가적으로 입력을 하는데, 각 입력에는 열의 갯수(M)만큼의 숫자를 입력한다. 출력: 시작점부터 N,M까지 최단경로를 지나는 정점의 갯수 출력 이 미로문제를 격자형 그래프로 바라봤을때, 시작점부터 종착지까지 그래프의 연결노드 갯수(vertex)*_가 출력하고자하는 값과 동일함을 알수있다. *_격자형 그래프를 만들기 위해서는, 처음 시작하는 점에서 인접한 정점이 1일 경우 간선(Edge)을 만들어 줄 수 있다. 먼저, 격자형 그래프를 만들고 격자형 그래프를 만들게 되면 하나의 연결요소를 만들..

그래프 탐색 알고리즘(Graph Search Algorithm)

그래프 탐색 문제 그래프 탐색 문제란? 어떤 한 그래프와 해당 그래프의 시작 정점이 주어졌을때, 시작점에서 간선(Edge, E)을 타고 이동할 수 있는 정점(Vertex, V)들을 모두 찾아야 하는 문제를 의미합니다. 이 문제를 해결하는 그래프 탐색 알고리즘에는 흔히 너비 우선 탐색(BFS)과 깊이 우선 탐색(DFS)이 있습니다. 이에 대해서 알아보도록 합시다. 두 알고리즘의 공통점은 그래프 탐색 문제에 대한 해답을 올바르게 찾는다는 점이다. 각 알고리즘의 특성을 살펴보자. 1. 깊이우선탐색(Depth-First Search, DFS) DFS는 깊이 우선 탐색이라고 불리며 그 이유는 그래프의 시작점에서 다음 브랜치로 넘어가기 전에, 해당 브랜치를 모두 탐색하기 때문입니다. 알고리즘 개요는 시작점-> 시작..

Algorithm/Theory 2022.01.29

M1 mac에서 Tensorflow + PycharmIDE 환경만들기

목적 m1 mac에서 tensorflow를 사용하려함 tensorflow certificate exam 환경을 구축하려함 설치한 Libray 버전(2022.01.22 업데이트) tensorflow==2.7.0 Pillow==8.4.0 pandas==1.3.4 numpy==1.21.4 scipy==1.7.3 tensorflow-datasets==4.4.0 # tensorflow certificate exam 를 위한것 절차 Xcode 설치(Install Xcode) xcode-select --install Install Miniforge3 conda 환경을 위해 Miniforge3-MacOSX-arm64.sh 파일 다운로드 chmod +x ~/Downloads/Miniforge3-MacOSX-arm64.s..

AI/Deep learning 2022.01.22

1. Docker 사용기

이제 도커를 사용해보자. 환경구축(Windows) 윈도우의 경우 wsl을 통해서 최적의 도커환경을 구축할 수 있다. cmd에 wsl --install 입력후 Enter Docker destop 다운로드 및 설치 관련 설정 진행 cmd에 docker --version 입력후 버전 나오는지 확인 도커 명령어 9선 어찌보면 당연하지만, 도커 명령어를 파악하는데 가장 좋은 방법은 공식문서를 확인하는것이다. 여기에 남기는 9선은 가장 많이 사용하는 명령어들을 나열한것이다. 1) 도커 컨테이너 실행 docker run [OPTIONS] [Container Name] -d: detached mode, 백그라운드 모드 -p: 호스트(Host)와 컨테이너 포트 연결(Forwarding) 호스트라 함은 Docker를 구동..

0. 도커? 뭔데 쓰는걸까?

도입 배경 많은 사람들이 도커 도커 말은 대충 많이 하는데, 무엇인지 정확히는 몰랐다. 그러던중 아래와 애로 사항를 실제로 겪어왔었고 이 글을 보시는분들도 비슷한 경험을 했다면 도입을 고려하시길 추천드린다. 서버구축 수업때의 경험을 잠시 빌리자면, CentOS 등 리눅스 OS설치와 Oracle을 설치하면서 원인모를 오류들을 대처하느라 ./congigure, make && make install을 수도없이 쳐왔었다. python Deep learning 대표 library인 tensorflow 실습도중 version 이슈 때문에 실습 매뉴얼과 똑같이 구상했는데도 오류가 났었다. 분명 내가 1년전 짰던 코드이고 다시 실행시켰을때 동작하지 않는 경우가 생겼다. 내가 만든 서비스가 다른OS에서도 호환성을 가지..

Dockerfile에 sudo 쓰는법

Dockerizing을 습득하기 위해서 우분투에서 지금까지 했던 작업을 dockerfile로 만들고자 하였다. 그러나 지금까지 sudo를 사용했다는 사실을 깨달았고 dockerfile에 sudo을 어떻게 하면쓸수있는지 알아보자. 아래 절차는 모두 dockerfile내에서 작업하면 된다. # 1.sudo 사용자 설치 및 사용자 설정 RUN apt-get update RUN apt-get install -y sudo # 2. 사용자 계정 추가 RUN adduser --disabled-password --gecos "" user && echo 'user:user' | chpasswd && adduser user sudo echo 'user ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

(3) 머신러닝 시스템 배포(Deployment & Monitoring)

머신러닝 시스템 배포 머신러닝 프로젝트 라이프 사이클에서 대분류로 보면, scoping -> data -> modeling -> deployment 순으로 이루어져 있다. 여기서 직관적으로 알기 쉬운 Deployment부터 차례로 알아보도록 하겠다. 1. 머신러닝 시스템 배포 대표적인 패턴 머신러닝 시스템을 배포는 어떠한 방식으로 하는것일까? 머신러닝 시스템을 배포에 가장 흔히 사용되는 케이스에 대해서 알아보도록 하자. 일반적으로 머신러닝 시스템을 배포하는 사용자의 상황은 크게 3개로 나눌 수 있다. 새로운 제품이나 새로운 서비스를 시작할때 => 컴퓨터 리소스를 할당할 때, 작은 트래픽을 지원하는 것부터 시작해서 점차적으로 늘리는 걸 추천한다. 즉, subset부터 테스트를 시작해서 늘리는 방식. 기존에..

AI/MLOps 2022.01.16

[한개라도 제대로] 구현(3)

서론 구현 3번째 문제이다. 이번 문제는 문자열을 정렬하는건데, 문자열 다루는 코딩테스트 문제는 대표적으로 카카오 계열에서 많이나온다고 한다. 본론 머릿속으로 생각해보면 전혀 어려워보이지 않는다. def stringSort(S): slist = list(S) num_sum = 0 asci_list = list(map(lambda x: ord(x), slist)) asci_list.sort() new_list =[] for index,sub_s in enumerate(asci_list): if ord('1')

(2) 머신러닝 프로젝트: 기획부터 배포까지

머신러닝 프로젝트 라이프 사이클 다양한 도메인에서 진행되는 Machine learning 프로젝트에는 공통적인 일련의 과정들이 있다. 기본적으로 데이터 수집부터 시작해서 데이터 사이에서 인사이트를 얻기 위한 EDA, 많은 데이터 중 중요변수만 찾기위한 Feature Engineering, 데이터 결측치 처리 등 데이터의 퀄리티를 높이기 위한 Data Cleansing 등이 있다. 여기서 MLOps는 위에서 말한것들에서 더 나아가 AI 서비스/제품을 배포(Deployment)하기 위한 프로세스까지 커버할 뿐만 아니라 사후관리(Error Analysis)까지 다룬다. 크게 분류하자면 Scoping -> Data -> Modeling -> Deployment로 나눌 수 있다. 이에 대해서 자세히 알아보도록 하..

AI/MLOps 2022.01.11

[한개라도 제대로] 구현(2)

서론 구현 2번째 문제이다. 이번 문제는 dx dy 방향벡터를 활용해서 문제를 풀어보도록 하겠다. 본론 1) a -> 1, b->2 ... h->8 으로 해석할 수 있겠구나! 이를위해 ord()함수를 써서 문자열을 아스키 코드로 바꿔서 행렬계산해보자(*chr()은, 숫자를 아스키코드로 바꾸는데 사용) def kingKnight(S): x = ord(S[0]) - 96 y = int(S[1]) cnt = 0 if x - 2 > 0 and y - 1 > 0: cnt+=1 if x - 2 > 0 and y + 1 > 0: cnt += 1 if x + 2 > 0 and y - 1 > 0: cnt += 1 if x + 2 > 0 and y + 1 > 0: cnt += 1 if x - 1 > 0 and y - 2 ..