본문 바로가기

전체 글156

Refectoring Refectoring 이란? 외부 동작을 바꾸지 않으면서 내부 구조를 개선하는 방법 버그가 끼어들 가능성을 최소화하면서 코드를 정리하는 "정형화된 방법" 코드를 작성한 후에 코드의 디자인을 개선하는 것 Refectoring 에서 요구하는 코드 = 깔끔한 코드 깔끔한 코드는 모든 테스트를 통과한다. 깔끔한 코드는 다른 프로그래머에게도 그 의미가 명백하다 깔끔한 코드에는 중복이 존재하지 않는다. 깔끔한 코드는 최소한의 클래스, 즉 꼭 픽요한 클래스만을 가진다. 깔끔한 코드는 더 적은 비용으로 , 더 쉽게 유지보수 할 수 있다. Bad smells in Code Refectoring의 깔끔한 코드에 속하지 않는 고쳐야 할 코드 Bad smell code 중복된 코드 코드가 여기저기 겹쳐 있는 경우 긴 메소드 .. 2021. 9. 15.
최단 경로 알고리즘 (3) 플로이드 워셜 알고리즘 플로이드 알고리즘은 '모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 하는 경우'에 사용할 수 있는 알고리즘이다. 다익스트라 : 단계마다 최단 거리를 가지는 노드를 하나씩 반복적 선택 , 해당 노드를 거치는 경로를 확인하며 테이블을 갱신해 나간다. ( 탐욕법 ) 플로이드 : 단계마다 ' 거쳐 가는 노드'를 기준으로 수행되지만 매번 방문하지 않는 노드 중에서 최단 거리를 갖는 노드를 찾을 필요가 없다. ( 동적 프로그래밍 ) 노드의 개수가 N개일 때, 알고리즘상 N번의 단계를 수행하고 단계마다 O(N^2)의 연산을 통해 '현재 노드를 거쳐 가는 모든 경로'를 고려한다. 따라서 총 시간 복잡도는 O(N^3)이다. 플로이드 알고리즘에서는 모든 노드에 대하여 다른 모든 노드로.. 2021. 9. 8.
최단 경로 알고리즘 (2) 개선된 다익스트라 알고리즘 저번장의 알고리즘은 시간 복잡도가 O(V^2)으로 노드의 개수가 10,000개를 넘어가는 순간 해결이 어려워졌었다. 하지만 다음의 구현 방법을 이용하면 최악의 경우에도 시간 복잡도 O(E logV)를 보장하여 해결할 수 있다. 여기서 V는 노드 개수 , E는 간선 개수이다. 저번 장의 알고리즘에서 최단 거리가 짧으면서 탐색하지 않은 노드를 찾기 위해서 선형적으로 테이블을 탐색해야 했다 => N 이 때 힙 자료구조를 사용하여 최단거리에 대한 정보를 빠르게 찾도록 하자 힙을 사용하면 선형시간이 아닌 로그시간이 걸리므로 N이 1,000,000 이라면 로그시간에서 약 20 정도로. 속도가 크게 빨라진다. - 파이썬에서 우선순위 큐를 지원하기 위해 PriorityQueue 와 heapq.. 2021. 9. 6.
최단 경로 알고리즘 최단 경로 알고리즘에 대표적인 알고리즘으로는 다익스트라, 플로이드 워셜, 벨만 포드 알고리즘이 있다. 다익스트라 최단 경로 알고리즘 그래프에서 여러 개의 노드가 있을 때, 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구해주는 알고리즘이다. 이 때 조건은 음의 간선이 없는 경우에 정상적으로 동작한다는 점이다. 현실 세계에서의 길에는 음의 간선의 표현될 일이 없으므로 실제 GPS 소프트웨어의 기본 알고리즘으로 채택되곤 한다. 다익스트라 알고리즘을 그리디 알고리즘(탐욕법)으로도 분류된다. '매번 가장 적은 비용의 노드를 선택'하는 임의의 과정을 반복하기 때문이다. 알고리즘은 최단 경로를 구하는 과정에서 각 노드에 대한 현재까지의 최단거리를 단계마다 게속 갱신해 나간다. 즉 매번 현재 처리하고.. 2021. 9. 1.
정규표현식 (2) 메타 문자 | ' | ' 문자는 or 과 동일한 의미롤 사용되는 메타 문자로 A | B는 A 또는 B 라는 의미를 갖는다. >>> p = re.compile('Crow|Servo') >>> m = p.match('CrowHello') >>> print(m) ^ ' | ' 문자는 문자열의 맨 처음과 일치한다는 것을 의미한다. ^Life life로 시작하는 문자열의 의미를 갖는다. >> print(re.search('^Life', 'Life is too short')) >>> print(re.search('^Life', 'My Life')) None >> print(re.search('^Life', 'Life is too short')) >>> print(re.search('^Life', 'My Life').. 2021. 8. 14.
정규 표현식 복잡한 문자열을 처리할 때 사용하는 기법으로 파이썬 뿐만 아니라 다른 모든 곳에서 자주 사용된다. 메타 문자 메타 문자란 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자를 말한다. 문자 클래스 [ ] 문자 클래스로 만들어진 정규식은 "[ ] 사이의 문자들과 매치" 라는 의미를 갖는다. 이 때 [] 사이에는 어떤 문자도 들어갈 수 없다. 이 때 하이폰(-)을 사용하면 두 문자 사이의 범위를 의미한다. (^)은 부정으로 반대를 의미한다. (1) a (2) bee (3) dot -1- [ a b c ] : (1)은 정규식과 일치하는 'a'가 있으므로 매치 , (2)도 'b'로 인해 매치 (3) 은 포함하는 문자가 없어 매치 X -2- [ a-zA-z ] : 알파벳 모두 해당하므로 (1) (2) (.. 2021. 8. 13.
다이나믹 프로그래밍 컴퓨터의 연산에는 크게 두 가지의 제약사항이 존재한다. 메모리 공간과 연산 속도의 한계이다. 이러한 상황에서 메모리 공간을 약간 더 할애 한다면 비약적으로 연산속도를 증가시킬 수 있는 방법이 있다. 이 대표적인 방법이 다이나믹 프로그래밍 , 동적 게획법이다. 다이나믹 프로그래밍은 2가지 방식 텀 다운과 보텀 업으로 나눌 수 있는데 텀 다운 같은경우에는 맨 위의 큰 문제에서 아래 문제로 쪼개 가며 해결해가는 하향식 해결 방법이고 보텀업의 경우에는 작은 문제들을 먼저 해결해가면서 큰 문제로 합쳐서 해결하는 상향식 해결방법이다. 다이나믹 프로그래밍을 설명하는데에는 피보나치 문제가 주로 이용된다 피보나치 수열에 대해서 설명은 생략하고 재귀적으로 풀어낸 피보나치 소스코드를 살펴보면 아래와 같다. def fibo(.. 2021. 8. 12.
sys 모듈 사용하여 빠르게 입력받기 import sys input_data = sys.stdin.readline().rstrip() ===== restrip을 사용하는 이유 readline으로 입력하면 엔터가 줄 바꿈 기호로 입력되는데 공백 문자를 제거하려면 rstrip() 함수를 사용햐여 헌다. 2021. 8. 11.
내장함수 abs 숫자의 절대 값을 돌려주는 함수 >>> abs(3) 3 >>> abs(-3.0) 3.0 all 반복 가능한(iterable) 자료형을 입력값으로 받아 모든 요소가 참이면 True를 , 하나라도 거짓이면 False를 반환한다 >>> all( [ 1, 2, 0, 3] False >>> all( [] ) True any 반복 가능한 자료형을 입력으로 받아서 요소 중 하나라도 참이 있으면 True를 , 요소 모두 거짓이라면 False를 반환한다. >>> any( [ 0, ""]) False >>> any( [] ) False chr chr(i)는 유니코드 값을 입력 받고 그 코드에 해당하는 문자를 출력한다. >>> chr( 97 ) 'a' >>> chr(44032) "가" ord 문자를 입력받고 그에 해.. 2021. 8. 10.
ABOUT ME 한재민 E-mail : hanjaemin.mail@gamil.com github : https://github.com/HanJaemin-kr 관심 분야 ○ 시계열 데이터 수집 및 처리 ○ 웹 개발 - backend : NEST.JS - frontend : VUE.JS - infra : docker, influxDB, redis, socket, mysql ○ AI 알고리즘 개발 ○ 고장 진단 알고리즘 개발 ( 진동, 음향 방출 ) TIME LINE # 수상 ‘2022 UOU Capstone Design Awards’ 장려상 - 2022.12.22 - 주제 : 진동 센서를 활용한 AAS 기반의 제조설비 고장진단 시스템 주최 : 울산대학교 & LINC 사업단 울산대학교 총장상 ‘2022 U-챌린지 페스티벌’ .. 2021. 8. 7.
예외 처리 Try, catch 문 try : ... except [ 발생 오류 [ as 오류 메시지 변수 ] ]: .... try 블록 수행 중 오류가 발생하면 except 블록이 실행된다. 하지만 try 블록에서 오류가 발생하지 않는다면 except 블록은 수행되지 않는다. except에는 추가로 발생 오류를 제한할 수 있는 방식과 발생 오류와 오류메시지 변수까지 포함하여 실행할 수 있다. 또한 except문은 단일로 선언하는 것 뿐만아니라 다중으로 선언하여서 각 발생 오류에 대해서 개별적으로 처리가 가능하다. 동일한 처리를 2개 이상의 발생 오류에 대해서 except문을 사용하는 경우에는 인자값으로 써 넣어주면 함께 처리가 가능하다 (ex) Try: 4 / 0 except ZeroDivisionError as .. 2021. 8. 6.
정렬 데이터를 특정한 기준에 따라 순서대로 나열하는 것을 말하고 프로그램을 작성할 때 가장 많이 사용하는 알고리즘 중 하나다. 정렬 알고리즘은 매우 다양하고 요구하는 문제에 대해서 효과적인 정렬 알고리즘을 선택해 사용하는 것이 프로그램에 효율적인 동작구동에 큰 도움을 준다. 선택 정렬 가장 작은 데이터를 선택해서 맨 앞에 놔두고 이러한 과정을 연속해서 진행하는 정렬로, 작은 값들을 앞에서부터 차곡차곡 쌓는다고 생각하면 좋다. 이 방법은 가장 원시적인 방법으로 매번 가장 작은 것을 선택한다라는 뜻으로 선택 정렬이라 이름 붙게 되었다. 따라서 마지막 요소를 제외한 모든 데이터를 작은 순서로 접근해야 하고 N-1 번 자리교체가 이루어져야 한다. 선택 정렬은 N -1 번 만큼 자리이동을 하고 , 매번 작은 수를 찾기.. 2021. 8. 5.
반응형