목록전체 글 (146)
개발자 블로그

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..
문제 보기 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 나의 풀이 - 병합정렬 O(nlogn) # 정렬이 된 두 배열을 합치면서 정렬시키는 함수 def merge(array1, array2): result = [] array1_index = 0 array2_index = 0 while array1_index < len(array1) and array2_index < len(array2): if array1[array1_index] < array2[array2_index]: result.appen..
문제 보기 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 나의 풀이 n = list(input()) n.sort(reverse=True) if int(n[-1]): print(-1) else: s = sum([int(n[i]) for i in range(len(n))]) if s % 3: print(-1) else: print(''.join(n)) 3의 배수의 특징을 알면 풀이가 쉽다... 각 자리 수의 합이 3의 배수이라는 특징을 활용하자. 1) 그 중 가장 큰 수를 구하기 위해 정렬 메소드를 사용. 2) 문..

1. instance 에 접근하여 추가, 생성, 수정, 삭제, 부분삭제하는 add(), create(), set(), clear(), remove() 메소드. 주로 N:N필드 생성 및 수정 시 사용 - add함수는 파라미터가 복수의 값이라면 언패킹 후 인자로 넣어줘야함 - set함수는 수정할 때, 쓰이며 복수의 값이 들어올 때, 리스트 형태 그대로 넣어줘야함. 파라미터 2개까지만 받음. 2. objects.filter().update() -> 객체 수정후 객체 아이디를 반환! 수정 된 객체를 반환하지 않음. 시리얼라이저 update 함수 커스텀할 때 해당 부분 주의하자 3. 시리얼라이저 필드 설정 - read_only, write_only를 상황에 맞게 조절해서 역직렬화, 직렬화 에러를 막자! 하나의 시..
문제 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 나의 풀이 # 투포인터 한개는 left 나의 위치, right는 나보다 작은 노드의 위치 # right 노드와의 거리까지 주유를 한다. # right가 left의 가격을 비교하고 더 작은 값이 나올 때 까지 이동 n = int(input()) distance_lst = list(map(int, input().split())) price_lst = list(map(int, input().split())) answer = 0 left = 0 rig..
파이썬 메모리 구조 Text 영역: 코드 영역이라고 하며 실행할 프로그램의 코드가 저장되는 영역이라고 한다. CPU는 텍스트 영역에 저장 된 명령어를 하나 씩 처리한다. Data 영역: 전역 변수와 정적 변수 즉, globals()에 등록된 변수를 저장하는 영역이며, 프로그램 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. Stack 영역: 지역 변수(함수 내부 변수)와 매개변수 즉, locals()에 등록된 변수를 저장하는 공간이다. 그러므로 당연히 함수가 실행이 될 때 함께 할당이 되고 함수가 종료되면 소멸된다. Heap 영역: 사용자의 동적 할당으로 생성되는 영역이며, 사용자가 공간의 크기를 직접 관리할 수 있다고 한다. 해당 영역의 크기는 프로그램이 실행되는 도중인 런타임 동안 사용자가 직접..
문제 링크 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 나의 풀이 n = int(input()) meeting_times = [tuple(map(int, input().split())) for _ in range(n)] meeting_times.sort(key=lambda x: (x[1], x[0])) stack = [meeting_times[0]] for i in meeting_times[1:]: if i[0] >= stack[-1][1]: stack.append(i) print(len(stack)) 1) 입력값을 튜플형태로 리스트로 받는다. 2) 우선순위 정렬을 끝나는 시간 -> 시작하는 시간 순으로 정렬 * 정렬을 ..