분류 전체보기
-
[Clean Code] 함수Dev/정리 2022. 5. 15. 11:24
SOLID (객체지향설계) 객체지향 설계의 5가지 원칙 1. SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 클래스는 하나의 기능만 가지며, 어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이여야 한다. SRP 책임이 분명해지기 때문에, 변경에 의한 연쇄작용에서 자유로워 질 수 있다. 가독성 양상과 유지보수가 용이해진다. 실전에는 쉽지 않지만 늘 상기해야 한다. 2. OCP 개방/폐쇄 원칙 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 변경을 위한 비용을 줄이고, 확장을 위한 비용은 가능한 극대화 해야 한다. 요구사항의 변경이나 추가사항이 발생하더라도, 기존 구성요소에는 수정이 일어나지 않고, 기존 구성요소를 쉽게 확장해서 재사용한다. 객체지향의 추상화의 ..
-
[Clean Code] 깨끗한 코드, 의미 있는 이름Dev/정리 2022. 5. 14. 21:22
나쁜 코드란? - 성능이 나쁜 코드 - 의미가 모호한 코드 - 중복된 코드 나쁜 코드가 나쁜 이유 - 깨진 유리창 법칙 나쁜 코드는 깨진 유리창처럼 계속 나쁜 코드가 만들어지도록 한다. - 생산성 저하 나쁜 코드는 생산성을 저하 시킨다. - 새로운 시스템을 만들어야한다 현시스템을 유지보수하며, 대체할 새로운 시스템 개발은 현실적으로 매우 어렵다. 클린 코드 - 성능이 좋은 코드 - 의미가 명확한 코드(= 가독성이 좋은 코드) - 중복이 제거된 코드 -> 명료한 코드 간단한 코드 - 모든 테스트를 통과한다. - 중복이 없다. - 시스템 내 모든 설계 아이디어를 표현한다. - 클래스, 메서드, 함수 등을 최대한 줄인다. 의미 있는 이름 짓기 - 의도를 분명히 밝히기 // 잘못된 변수 int a; String..
-
AWS Error Code: SignatureDoesNotMatch 해결방법삽질모음/에러해결 2022. 5. 2. 19:04
로컬에선 정상적으로 파일 업로드가 되는 것을 확인하였는데, 서버 반영 후 com.amazonaws.services.s3.model.AmazonS3Exception: The request signature we calculated does not match the signature you provided. key를 확인해보라는 오류가 발생하였다. 구글링 해보니 yml에 적혀진 SecretKey 에 / 나 % 가 있으면 인식이 안되는 문제이다. 해결방법 / 나 % 가 없는 SecretKey가 생성될 때 까지 액세스키를 만든 후, yml에 있는 키를 변경해준다.
-
[알고리즘] 최근접 점쌍 찾기Computer Science/Algorithm 2021. 12. 16. 03:06
최근접 점쌍 찾기 2차원 평면상에 있는 N개의 점들 중에서 서로의 거리가 가장 가까운 두 점을 찾는 문제 간단한 방법 모든 상의 거리를 모두 계산하여 가장 가까운 쌍을 찾는 것 시간 복잡도 O(N^2) 정렬을 사용한 방법 합병 정렬 알고리즘에서 사용하는 분할-정복 기법을 사용 시간 복잡도 O(N log N) 분할-정복 기법을 사용한 최근접 점쌍 찾기 알고리즘 X 좌표 값을 사용해 점을 정렬한 다음 반으로 나눔 가장 가까운 쌍을 이루는 두 점은 모두 한쪽 절반에 있든지 아니면 하나는 한쪽 절반에, 다른 하나는 나머지 절반에 있음 가장 가까운 쌍을 이루는 두 점이 분할선(dividing line)을 가로지르는 경우 효과적으로 검사할 수 있는 방법이 필요 알고리즘 동작 과정 동작 과정을 표로 나타 낼 수도 있..
-
[알고리즘] 그라함 스캔 알고리즘Computer Science/Algorithm 2021. 12. 15. 12:28
그라함 스캔 알고리즘 1972년 로날드 그라함에 의해 개발된 알고리즘 주어진 점 집합으로부터 단순 폐쇄 다각형을 만든 다음, y좌표 값이 가장 작은 점부터 시작해 다각형의 꼭지점들을 순서대로 방문하면서 볼록 껍질에 포함될지 여부를 검사하는 것이다. 볼록 껍질에 포함되는지 검사 방법 p[1], p[2], ..., p[M]이 부분 볼록 껍질이라 하고 새로운 점 p[i]를 추가하고자 할 때, ccw(p[M], p[M-1], p[i])≥ 0 이면 p[M]을 제거 p[M-1], p[M], p[i]가 우회전이면, p[M]을 제거하고, 좌회전이면 p[i]를 포함한다. 그라함 스캔 알고리즘 동작 과정 먼저 y 점이 가장 작은 점을 선택한 후, 그 점에서 부터 가장 작은 각도를 만드는 순서대로 번호를 매겨줍니다. 처음 ..
-
[알고리즘] 최적 이진 탐색 트리Computer Science/Algorithm 2021. 12. 14. 20:02
최적 이진 탐색 트리 트리 내의 키와 각 키가 탐색될 확률이 주어져 있을 때, 그 트리의 평균 탐색 비용, 즉 평균 비교 횟수를 계산하고 이를 최소화하는 탐색트리를 구축하는 문제 이진 탐색 트리 루트의 왼쪽 서브트리에 있는 원소의 키 값은 루트보다 작고, 루트의 오른쪽 서브트리에 있는 원소의 카 값은 루트보다 큰 이진 트리 점화식 최적 이진 탐색 트리 구하기 1. A[i, j] 테이블과 k 테이블을 그려줍니다. A테이블 대각선엔, 문제에서 주어진 확률을 K테이블 대각선엔, 순서대로 초기 값을 적어줍니다. 2. 점화식을 이용하여 테이블의 값을 채워줍니다. 3. 이진 탐색 트리 그리기 - k테이블에서 1행 가장 맨 끝 값을 가져옵니다. k[1, 4] = 3 값이 3이기 때문에, 이는 3번 노드가 최상단임을 ..
-
[알고리즘] 스트링 편집 거리Computer Science/Algorithm 2021. 12. 14. 19:19
스트링 편집 거리(string edit distance) 두 스트링의 유사도를 측정하기 위해 사용 Levenshtein distance(LD)라고도 함 원래 스트링을 S, 목표 스트링을 T S를 T로 변환하는 데 필요한 삽입, 삭제, 대치 연산의 최소 비용 편집 거리가 커질수록, 두 스트링의 유사도는 낮아지게 됨 논문이나 보고서의 표절 검사, DNA 염기 서열의 유사도 검사 등에 사용됨 동적 계획법의 적용 스트링 편집 거리 예시를 들어 설명하겠습니다. S = GUMBO T = GAMBOL U -> A 로 교체 L 을 추가 따라서, GUMBO를 GAMBOL로 변경하는 최소 편집 거리는 2임을 알 수 있습니다. 스트링 편집 거리를 구하기 위해선, 간단히 표로 작성하여 구할 수 있습니다. 1. 초기 테이블을 ..
-
[알고리즘] 기하 알고리즘 - 2차원 트리Computer Science/Algorithm 2021. 12. 14. 04:14
2차원 트리 이진 트리 형태를 가지며, 동적으로 변화하는 트리 범위 탐색에 편리하게 사용할 수 있도록 기하학적 공간을 나눔 만드는 과정 이진 탐색 트리를 만드는 과정과 유사 이진 탐색트리와 다른 점은 이진 트리의 레벨에 따라 y축과 x축을 번갈아 가면서, 한번은 y좌표값을 기준으로 삽입하고, 한번은 x좌표값을 기준으로 삽입하는 것임 2차원 트리 만드는 과정 1. 해당 위치가 x좌표 or y좌표인지 확인 2. 해당 위치에 맞는 좌표와 새로 삽입할 좌표와 비교 3. 위치 선정 4. x좌표 or y좌표자리인지 확인 5. 새로운 좌표를 알맞은 좌표모양으로 그려죽; 한번은 y좌표값을 기준으로 삽입하고, 한번은 x좌표값을 기준으로 삽입해야하므로, 삽입 시 쉽게 판별할 수 있도록 다른 모양으로 그려줍니다. 삽입 과정..