본문 바로가기

전체 글

(120)
DFS & BFS 그래프 탐색 알고리즘: DFS/BFS - 탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 말한다. * DFS/BFS는 코딩 테스트에서 매우 자주 등장하는 유형이다! - 스택 자료구조 stack = [] stack.append(5) stack.pop() # 최상단 원소부터 출력 print(stack[::-1]) # 최하단 원소부터 출력 print(stack) - 큐 자료구조 from collections import deque queue=deque() queue.append(5) queue.append(2) queue.popleft() print(queue) queue.reverse() print(queue) - 재귀 함수 자기 자신을 다시 호출하는 함수, 종료 조건을 무조건 포함해야한다. ..
구현: 시뮬레이션과 완전 탐색 구현이란? - 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정이다. 그럼 알고리즘 대회에서 구현 유형의 문제란? - 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제를 지칭한다. ex. 알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제 실수 연산을 다루고, 특정 소수점 자리까지 출력해야 하는 문제 문자열을 특정한 기준에 따라서 끊어 처리해야 하는 문제 적절한 라이브러리를 찾아서 사용해야 하는 문제 1. 일반적으로 알고리즘 문제에서 2차원 공간은 행렬의 의미로 사용된다. 그리고 2차원 공간에서의 방향 벡터가 자주 활용된다. # 동, 북, 서, 남 dx = [0,-1,0,1] dy = [1,0,-1,0] # 현재 위치 x, y = 2, 2 for i in range(4): # 다음 위치 nx =..
그리디 그리디 알고리즘이란? - 현재 상황에서 지금 당장 좋은 것만 고르는 방법 - 정당성 분석이 중요 ➡️ 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토가 필요한 기법이다. (일반적인 상황에서 그리디 알고리즘은 최적의 해를 보장할 수 없을 때가 많다.) EX. 거스름 돈 문제 문제: 1260원을 거슬러주어야 할 때 가장 적은 숫자의 화폐를 이용해 거슬러주는 경우에 대해서 찾아본다. 답: 최적의 해를 빠르게 구하기 위해 가장 큰 화폐 단위부터 돈을 거슬러주면 된다. N원을 거슬러줘야할 때, 가장 먼저 500원으로 거슬러 줄 수 있을만큼 거슬러 준다. 이후로 100원, 10원으로 거슬러주기 ➡️ 정당성 분석 가지고 있는 동전 중에서 큰 단위가 항상 작은 단위의 배수이므로 작은..
QUICK DBD 사용 후기 평상시 DB 설계할 때 Aquery tool 사용한다. GUI로 daigram을 확인하면서 설계를 하는 것이 더 편하게 느껴진다 :> Aquery tool이 유료화된다는 소식을 듣고, 새로운 ERD 툴을 이것저것 사용해보던 중, Quick DBD를 사용해보게 되었다! 사용법을 익히는 과정 없이 처음 사용자도 이 툴을 쉽게 익힐 수 있도록 예시가 잘 작성되어 있다! 그냥 예시 테이블을 나의 테이블로 커스텀해서 바로 사용 가능하다. 왼쪽 코드부분에서 table을 입력하면, 오른쪽 GUI 화면에서 즉각적으로 반영이 된다. (반응이 아주 빠른 편 GOOD!) "오잉? 갑자기 코드?" 라고 생각할 수 있는데, 코드보다는 입력에 가깝다! 그냥 테이블 명, 타입, 외래키 설정을 입력해주면 된다 !(default값을 ..
18장. 냄새와 휴리스틱(clean code) -2 부적절한 상황들 일반 죽은 코드 -> ex) 불가능한 조건을 확인하는 if 문 등, 죽은 코드는 제거하라. 수직 분리 -> 변수와 함수는 사용되는 위치에 가깝게 정의 일관성 부족 -> 어떤 개념을 특정 방식으로 구현했다면 유사한 개념도 같은 방식으로 구현해라. 잡동사니 -> 사용이 없는 모든 것을 삭제해라. 인위적 결합 -> 함수, 상수, 변수를 선언할 떄는 위치를 신중히 고르자. 기능 욕심 -> 클래스 메서드는 다른 클래스에 관심을 가지면 안된다. 모호한 의도 -> 의도가 분명히 표현되도록 코드를 작성하라. 부적절한 static 함수 -> 조금이라도 의심이 들면 인스턴스 함수로 정의해라. 알고리즘을 이해해라. if/else 혹 switch/case문보다 다형성을 사용하라. review 내용이 많아서 이..
17장. 냄새와 휴리스틱(clean code) -1 부적절한 상황들 주석 부적절한 정보 - 일반적으로 작성자, 최종 수정일 , software problem report 번호 등과 같은 메타 정보만 주석으로 넣는다. 쓸모 없는 주석 - 쓸모 없어질 주석은 아예 달지 않는 편이 좋다. 중복된 주석 - 코드로 충분하면 삭제해라 성의없는 주석 - 간결하고 명료하게 작성해라. 주석 처리된 코드 - 지워라! 환경 여러 단계로 빌드한다. - 빌드는 한단계로 끝내라. 여러 단계로 테스트한다. - 모든 단위 테스트는 하나의 명령으로 돌려라. 함수 너무 많은 인수 - 인수는 작을수록 좋다. 출력 인수 - 함수에서 출력 인수는 피하고, 함수가 속한 객체 상태를 변경하는 방식을 사용해라. 플래그 인수 - 플래그 인수는 피해라. 일반 한 소스 파일에 여러 언어를 사용한다. -..
10장. 클래스(clean code) 클래스 체계 순위 1) static or public 상수 2) private 변수 3) 비공개 인스턴스 변수 4) 공개함수 5) 비공개 함수 변수와 함수는 최선을 다해 비공개 상태를 유지하는 것이 좋으나, 테스트 코드에 접근을 허용하기도 한다. 클래스는 작아야 한다. 클래스가 맡은 책임은 작아야한다. - 클래스 이름은 해당클래스 책임을 기술해야한다. 단일 책임 원칙 - 클래스는 책임 즉 변경할 이유가 하나여야한다. 응집도 - 클래스는 인스턴스 변수 수가 작아야 한다. 응집도가 높아지도록 변수와 메서드를 적절히 분리하자. 클래스가 응집력을 잃는다면, 쪼개자. review 사실 모든 내용을 이해하지 못했다. 아직 경험이 부족한 것 같다! 한바퀴 돌고 난 후 다시 정독하기로 다짐해본다. 🏃 출처) clean..
8장. 경계(clean code) 외부코드 사용하기 ex) 자바에서 Map - 경계 인터페이스를 사용할 때는 여기저기 넘기지 말라 경계 살피고 익히기 외부 API를 사용할 때면 간단한 테스트 케이스를 작성하여 외부 코드를 익히는 편이 낫다. -> 외부 코드를 익히고 통합하는 것은 복잡한 과정이기 때문. 아직 존재하지 않는 코드 사용하기 특수하게는 우리가 알지 못하는 코드 영역도 있다. -> 필요한 경계 인터페이스를 알고, 우리가 바라는 인터페이스를 구현하라. 깨끗한 경계 외부 패키지에 의존하는 대신 우리 코드에 의존하는 편이 좋다. review 외부 패키지는 변할 가능성도 있고, 오히려 우리 코드보다 외부 코드에 휘둘리는 경우가 생긴다. 나도 외부 패키지는 되도록이면 지양하는 편이다. 오히려 더 복잡해지는 경우를 많이 경험했기 때문이다!..