목록분류 전체보기 (142)
개발자 블로그
DFS # 위의 그래프를 예시로 삼아서 인접 리스트 방식으로 표현했습니다! graph = { 1: [2, 5, 9], 2: [1, 3], 3: [2, 4], 4: [3], 5: [1, 6, 8], 6: [5, 7], 7: [6], 8: [5], 9: [1, 10], 10: [9] } visited = [] # 방문한 걸 저장하기 위한 배열 1. 우선 탐색 시작 노드를 1로 잡겠습니다! 2. 현재 방문한 노드인 1을 visited 에 추가합니다. # visited -> [1] 3. 인접한 노드들인 [2, 5, 9] 에서 방문하지 않은 것들은 [2, 5, 9] 입니다. 2 에 방문합니다. 4. 현재 방문한 노드인 2을 visited 에 추가합니다. # visited -> [1, 2] 5. 인접한 노드들인 [..
문제 설명 더보기 추석 트래픽 이번 추석에도 시스템 장애가 없는 명절을 보내고 싶은 어피치는 서버를 증설해야 할지 고민이다. 장애 대비용 서버 증설 여부를 결정하기 위해 작년 추석 기간인 9월 15일 로그 데이터를 분석한 후 초당 최대 처리량을 계산해보기로 했다. 초당 최대 처리량은 요청의 응답 완료 여부에 관계없이 임의 시간부터 1초(=1,000밀리초)간 처리하는 요청의 최대 개수를 의미한다. 입력 형식 solution 함수에 전달되는 lines 배열은 N(1 ≦ N ≦ 2,000)개의 로그 문자열로 되어 있으며, 각 로그 문자열마다 요청에 대한 응답완료시간 S와 처리시간 T가 공백으로 구분되어 있다. 응답완료시간 S는 작년 추석인 2016년 9월 15일만 포함하여 고정 길이 2016-09-15 hh:..
흔히 우리가 탐색을 할 때, 모든 배열을 확인하는 방법을 지양한다. 예를 들어 100까지 수 중에서 하나를 골라 up/down 게임을 한다고 하자. 우리는 보통 중간부터 수를 불러 좁혀나가는 식으로 하는 것이 빠르다는 것을 알고 있다. 따라서 모든 배열을 탐색하는 배열의 길이만큼의 시간 복잡도 대신 log2n의 시간복잡도를 갖을 수 있다. 이를 코드로 구현해보자! # 이진 탐색 - 정렬이 되어있는 배열에서 가능 finding_target = 14 finding_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] def is_existing_target_number_binary(target, array): current_min_idx = 0..
DB DIAGRAM URI & Method Summary API endpoint method 회원가입 users/signup/ POST 로그인 users/login/ POST 로그아웃 users/logout/ POST 프로필 users//profile/ GET, PUT, DELETE 구매 목록 조회 users//purchaselist/ GET 판매 목록 조회 users//sellinglist/ GET 찜 목록 조회 users//likelist/ GET 상품 products/ POST, GET products// GET, PUT, DELETE 댓글 products//comments/ POST, GET products//comments// GET, PUT, DELETE 좋아요 products//like/ P..
보호되어 있는 글입니다.
컴퓨팅에서 키를 값에 매핑할 수 있는 구조인, 연관 배열 추가에 사용되는 자료 구조이다. 해시 테이블은 해시 함수를 사용하여 색인(index)을 버킷(bucket)이나 슬롯(slot)의 배열로 계산한다. 데이터를 다루는 기법 중에 하나로 데이터의 검색과 저장이 아주 빠르게 진행된다. 해쉬 자료구조는 파이썬에서 딕셔너리와 같다. key값으로 빠르게 해당하는 value를 찾고 저장할 수 있는 자료구조이다. key와 매핑된 벨류를 반환하기 때문에 모든 배열을 돌아보지 않고 조회가 가능하므로 상수 시간의 시간 복잡도를 갖고 있다. 알고리즘 문제를 풀다보면 시간 복잡도를 줄이기 위해 index()라는 함수보다 딕셔너리로 값들을 저장하곤 한다. 하지만 딕셔너리도 다소 메모리가 더 잡히는 부분 때문에 이러한 부분도 ..
1. F expression 찜(좋아요) 기능은 product model에 있는 like_cnt 필드를 생성과 함께 업데이트를 해줘야한다. 업데이트 시 F()객체를 사용하지 않고 단순히 + 1을 하게 된다면, 레이스 컨디션 상황에 빠져 동시에 해당 기능이 원하는 값이 나오지 않을 수 있다. F()객체는 파이썬 메모리로 필드값을 가져오지 않고 디비 상에 필드를 참조하는 형식으로 race condition 상황을 피할 수 있다. 2. Unique Constraints Fields 찜(좋아요) 기능은 사용자-상품 필드를 묶어 유일해야한다. 3. 모델의 필드 related_name 설정 참조하는 모델을 2개 이상일 때 두개를 구분하기 위함이고, 나중에 역참조 모델을 가져올때 해당 설정의 값으로 불러온다. 4. ..
문제 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 나의 풀이(시간 초과) s = input() n = int(input()) s_list = list(s) cur = len(s_list) for _ in range(n): user_commend = input() if user_commend[0] == 'L' and cur != 0: cur -= 1 if user_commend[0] == 'D' and cur != len(s_list): cur += 1 if user_commend[0] == 'B' and c..
Array vs LinkedList 상황 Array LinkedList 특정 원소 조회 O(1) O(N) 원소 삽입, 삭제 O(N) O(1) 원소 추가 데이터 추가 시 공간이 찼다면 새로운 메모리를 할당 받아야한다. 모든 공간이 차도 맨뒤에 노드만 동적으로 추가한다. 정리 데이터 조회가 빈번하다면 Array! 삽입과 삭제 또는 데이터 추가가 빈번하다면 LinkedList! *그렇다면 파이썬의 경우 리스트는 링크드 리스트인가? pyhton의 리스트는 array로 구현되어 있다. 하지만 append의 경우 내부적으로 동적 배열이라는 걸 사용해서, 배열의 길이가 늘어나도 O(1)의 시간 복잡도가 걸리도록 설계가 되어있다. 따라서 python의 배열은 링크드 리스트로 쓸 수 있고, 배열로도 쓸 수 있게 만든 효..
1. 역참조하고 있는 필드(해당 모델에는 필드가 존재하지 않지만, 해당 모델을 참조하고있는 모델을 필드로 설정)를 get활용하여 데이터를 전달하는 방법은 시리얼라이저의 메소드필드를 사용해서 return값으로 역참조하여 객체 생성 ex) 하나의 게시글에 달린 모든 댓글 보기 - 댓글은 게시글을 참조하고 있다. get_필드명 으로 함수를 선언하고 객체의 역참조 필드를 불러오는 메소드 선언 -> 해당 메소드의 경우 dir() 메소드를 통해 확인 가능. : related_name에 설정한 필드명 또는 필드명_set 2. 시리얼라이저의 메소드 필드를 활용해서 역참조 되고있는 객체를 통해 더 나은 스트링을 반환할 수 있음. 해당 부분은 상품의 댓글 시리얼라이저를 갖고오는 데 user 필드가 pk가 아니라 usern..