본문 바로가기

전체 글

Posts/CS [Python 자료구조] 스택 (Stack) 💡 Goal - 스택을 이해한다. - 스택을 파이썬으로 구현한다. - 스택 특징 2가지 이상 말하기. 개념 LIFO(Last In First Out)으로 동작하며 데이터간 순서를 약속하는 추상자료형 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조 마치 스시를 다 먹고 접시를 쌓아 올리는 형태와 같은 개념으로 처음 쌓은 접시가 가장 나중에 제거 특징 스택의 활용 컴퓨터 내부 프로세스 실행 구조의 함수 동작 함수는 가장 나중에 호출된 것이 가장 먼저 종료 웹 브라우저 방문 기록 역순 문자열 생성 구조가 단순해 구현이 쉬움 데이터를 삽입, 삭제, 접근이 가능한 자료형 파이썬으로 코드를 구현할때 deque를 사용하거나 list를 사용 스택은 단순히 빠른 성능을 위해 사용되기에 배열 구조를 활용해 구현 deque .. 2022. 1. 9. 17:42
Posts/Django 실서비스에 Django ORM API 삽질 + 성능 개선기 본 포스팅에 적혀진 코드 작성 부분의 필드명, DB명은 포스팅을 위해 가상으로 작성하였습니다. 대신 코드는 직접 작성하였고 업무상의 내용이 포함되어 자세한 내용은 생략하였습니다. 1. 문제상황 Django를 통해 API를 개발하면 SQL 대신 ORM을 사용하게 됩니다. Django는 ORM을 작성 할때 debug_toolbar라는 미들웨어를 통해 보다 쉽게 query explain과 select query문을 조회할 수 있습니다. 쿼리의 갯수와 실행계획, ORM을 통해 작성된 쿼리 확인 가능 평소처럼 회사에서 개발하고 있는데 년/월 기준 전체 강사들의 정산 페이지의 정보를 한번에 볼 수 있는 리스트 페이지 API를 개발해야 하는 업무가 생겼습니다. 작업해야하는 API의 조건은 전혀 문제되지 않아 작업에 .. 2021. 12. 23. 23:10
Posts/Algorithm [boj] 더하기 사이클 - 1110 (python) 1. 문제 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다. 위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오. 2. .. 2021. 12. 12. 23:36
Posts/Algorithm [boj] 숫자 카드 2 - 10816 (파이썬) 1. 문제 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오. 2. 입력 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 몇 개 가지고 있는 숫자 카드인지 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이 수도 -10,000,000보다 크거나 같고.. 2021. 12. 12. 22:30
Posts/Algorithm [boj] 명령 프롬프트 - 1032 (파이썬) 1. 문제 시작 -> 실행 -> cmd를 쳐보자. 검정 화면이 눈에 보인다. 여기서 dir이라고 치면 그 디렉토리에 있는 서브디렉토리와 파일이 모두 나온다. 이때 원하는 파일을 찾으려면 다음과 같이 하면 된다. dir *.exe라고 치면 확장자가 exe인 파일이 다 나온다. "dir 패턴"과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 예를 들어, dir a?b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다. 이때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다. 이 문제는 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지를 출력하는 문제이다. 패턴.. 2021. 12. 12. 01:01
Posts/Algorithm [누구나 자료구조 알고리즘] python 퀵정렬 💡 Goal - 퀵정렬 알고리즘을 이해한다. - 퀵정렬 알고리즘을 파이썬으로 구현한다. - 퀵정렬 알고리즘 특징을 2가지 이상 말하기. 개념 다른 원소들과 비교만으로 정렬을 수행하는 비교 정렬 분할 정복 알고리즘중 하나 분할정복이란 → 문제를 2개로 분리하고 해결한 다음 결과를 다시 합치는 전략 매우 빠른 속도를 자랑하며 python의 sort가 퀵정렬로 구현됌 리스트에 pivot을 지정 후 pivot을 기준으로 작은 요소는 왼쪽, 큰 요소는 오른쪽으로 옮기는 전략 분할 : pivot을 기준으로 2개(좌, 우) 배열로 분할한다 정복 : 분할한 배열들의 크기가 분할이 불가능할때까지 순환 호출 (반복 호출) 결합 : 분할이 불가능할때까지 정렬된 배열들을 하나로 합친다. 순서(오름차순 기준) pivot을 임의.. 2021. 12. 12. 00:19
Posts/Algorithm [boj] 회의실 배정 - 1931 (파이썬) 1. 문제 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 2. 입력 첫줄 입력 값: N(1 ≤ N ≤ 100,000) 둘째줄 입력 값: N+1까지 회의 정보 시작 시간과 끝나는 시간은 231-1보다 작거나 같은 자연수 또는 0 3. 출력 첫째 줄에 최대 사용할 수 있는 회의의 최대 개수를 출력 .. 2021. 12. 11. 21:01
Posts/Algorithm [누구나 자료구조 알고리즘] Python 삽입정렬 💡 Goal - 삽입정렬 알고리즘을 이해한다. - 삽입정렬 알고리즘을 파이썬으로 구현한다. - 삽입정렬 알고리즘 특징을 2가지 이상 말하기. 개념 데이터를 앞에서 하나씩 확인 후 특정 조건에 부합하는 위치(좌 or 우)에 삽입 왼쪽은 이미 정렬되어 있는 가정으로 접근 선택정렬에 비해 실행시간 측면으로 조금 효율적 처음 key값은 두번째(index 1)부터 시작 비교, 시프트(이동), 삽입등이 사용되는 알고리즘 순서(오름차순 기준) 1번 인덱스부터 시작하는 반복문을 만든다. 임시로 1번 인덱스값과 데이터를 가지고 ← 방향으로 반복 비교한다. 왼쪽은 이미 정렬되어 있다는 가정 왼쪽 값이 크다면 큰 값을 현재 position으로 변경해주고 position을 -1 해준다. (왼쪽 순회) 2,3단계가 끝나면 현재.. 2021. 12. 11. 20:43