목록분류 전체보기 (142)
개발자 블로그
문제 보기 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) 우선순위 정렬을 끝나는 시간 -> 시작하는 시간 순으로 정렬 * 정렬을 ..
문제 설명 더보기 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다. 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다. 선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요. 제한..
전역 변수는 주로 변하지 않는 고정 값에 사용 지역 변수는 사용 이유: 지역 변수는 함수 내에 로직 해결에 국한, 소멸주기: 함수 실행 해제 시 내가 선언한 변수의 스코프는 적절한지 알고 사용하자. 한번만 선언해도 참조하여 쓸 수 있었는데 여러 곳에서 산발적으로 선언하여 메모리를 불필요하게 사용하진 않았는지 이러한 성능에 대한 고민을 할 필요가 있다. Global 전역 변수를 지역 변수 스코프에서 수정을 하려고 하면 UnboundlocalError를 만난다. 그럴 때 해당 변수를 global로 해당 변수를 지역 내로 불러와 사용할 수 있다. 하지만, 전역 변수를 지역 내에서 수정 되는 것은 지양해야한다. 코드의 수가 몇만줄 또는 여러 사람들과 협업을 해야할 시 다소 혼잡성을 야기할 수 있다. Nonloc..
문제 설명 더보기 후보키 프렌즈대학교 컴퓨터공학과 조교인 제이지는 네오 학과장님의 지시로, 학생들의 인적사항을 정리하는 업무를 담당하게 되었다. 그의 학부 시절 프로그래밍 경험을 되살려, 모든 인적사항을 데이터베이스에 넣기로 하였고, 이를 위해 정리를 하던 중에 후보키(Candidate Key)에 대한 고민이 필요하게 되었다. 후보키에 대한 내용이 잘 기억나지 않던 제이지는, 정확한 내용을 파악하기 위해 데이터베이스 관련 서적을 확인하여 아래와 같은 내용을 확인하였다. 관계 데이터베이스에서 릴레이션(Relation)의 튜플(Tuple)을 유일하게 식별할 수 있는 속성(Attribute) 또는 속성의 집합 중, 다음 두 성질을 만족하는 것을 후보 키(Candidate Key)라고 한다. 유일성(unique..
배포 - docker / nginx / uwsgi docker docker란? windows에서 virtualbox를 설치해 가상화 환경을 구축하는 것처럼, docker를 사용해 격리 된 공간에서 서비스나 os를 가상화 하여 띄울 수 있다. docker의 격리 된 공간에서 동작하는 것을 컨테이너라 한다. virtual machine과 같이 가상화를 하는 것은 비슷하지만, 구조적으로는 차이가 있다. docker-compose와 같은 container management 프로그램을 사용해 서비스 환경을 쉽게 구축 할 수 있다. 왜 docker를 사용하는가? docker-compose를 활용하면 원하는 아키텍처를 빠르게 구성 할 수 있다. 서비스가 host에서 동작하는 것이 아닌, container에서 동작하..