전체 글 126

(파이썬 python) 백준 11000번 : 강의실 배정(greedy)

우선 입력할 때 input으로 하니 시간초과가 떳다. -> sys라이브러리의 stdin.readline사용. 로직 1. 강의시간을 시작시간으로 정렬. 2. 맨 처음 강의시간의 종료시간과 두번째 강의의 시작시간을 비교 - 시작시간보다 종료시간이 느리면 새로운 강의실 배정 -> room에 heapq.heappush로 추가. - 시작시간보다 종료시간이 빠르면 기존 강의실의 종료시간 수정 -> room에 heapq.heappop 으로 기존 강의실 종료시 간을 제거하고 heapq.heappush로 새로운 종료시간 추가 굳이 heap자료구조를 사용해야 하나 생각을 해보았다. 우선 heap 자료구조가 시간복잡도 측면에서 list보다 효율적이고 heap을 사용하면 최소힙을 계속 유지해주기도 한다. # 11000번: 강..

알고리즘/Greedy 2022.05.11

(파이썬 python) 백준 9237번 : 이장님 초대(greedy)

1. 다 자라는데 가장 오랜 기간이 걸리는 나무를 첫 날 심어줘야 하기 때문에 나무를 내림차순 정렬 2. 심는데 1일, 다 자라고 나서 1일 총 2일 필요 + 심는 날짜 별로 일수 추가 3. 제일 늦게 완성되는 날짜 일수 출력. 예 - [2,3,4,3]의 나무가 있는 경우 1. 나무 [4,3,3,2]로 정렬 2. 각 나무 완성에 필요한 일수 계산 -> [2,3,4,5]를 각각 자리별로 더해줌. 3. 더해진 리스트에서 최대값 출력 # 9237번 : 이장님 초대 n = int(input()) li = list(map(int,input().split())) li.sort(reverse=True) li2 = [i+2 for i in range(n)] ans = [x+y for x,y in zip(li,li2)]..

알고리즘/Greedy 2022.05.11

백준 1343번 : 폴리오미노 (greedy)

1. 먼저 '.' 을 기준으로 입력값을 구분할 수 있도록 split함수를 사용하였다. 2. 구분된 리스트의 각 값들의 길이가 홀수이면 -1을 출력할 수 있도록 해준다. 이 때, flag변수를 설정해서 구분하였다. 3. 먼저 'AAAA'를 4로 나눈 몫만큼 곱해주고 나머지에 2로 나눈 몫만큼 'BB'에 곱해준다. 사실 지금 생각해보니 2로 나눈 몫은 항상 1이 될 수 밖에 없다. (결과는 같다.) 참고 print함수를 사용해서 list를 차례대로 출력하려고 할 때 *를 리스트 앞에 붙여주면 띄어쓰지 않고 출력해준다. 이 때 sep, end같은 print내부 옵션도 당연히 사용 가능하다. # 1343번 : 폴리오미노 li = input().split('.') ans = [] flag = 0 for i in ..

알고리즘/Greedy 2022.05.10

백준 1138번: 한 줄로 서기(greedy)

입력값만큼 키가 큰 사람을 앞에 두고 줄을 세우는 문제이다. 왼쪽부터 숫자 0의 개수를 기준으로 위치를 찾아 줄을 세우면 된다. 예를 들어 2,1,1,0 이면 [0,0,1,0] -> 0을 2개 지나친 이후 1 위치 [0,2,1,0] -> 0을 1개 지나친 이후 2 위치 [0,2,1,3] -> 0을 1개 지나친 이후 3 위치 [4,2,1,3] -> 0을 0개 지나친 이후 4 위치 # 1138번 : 한 줄로 서기 n = int(input()) li = list(map(int,input().split())) ans = [ 0 for i in range(n)] for i in range(n): cnt = 0 for j in range(n): if cnt == li[i] and ans[j] == 0: ans[j]..

알고리즘/Greedy 2022.05.10

백준 3109번: 빵집 - 파이썬(greedy)

DFS알고리즘을 알고 있어야 풀 수 있는 문제다. R,C로 행과 열의 값 pipe에 파이프라인 visited에 파이프가 이미 설치되어 있는 곳인지 확인하기 위해 False로 초기화 리스트 이런 변수들을 입력 및 선언하고 왼쪽부터 시작해서 맨 오른쪽이 원웅이네 가게 파이프라인까지 최대한 많은 선을 연결해야 하므로 첫번째 열 에서 파이프라인이 있는 지점 pipe[i][0] == '.' 에서 부터 탐색을 시작한다. solve함수를 호출하여 건물이 있는 지점을 피하며 오른쪽으로 이동하고, 방문했던 지점은 True로 흔적을 남긴다. solve함수 종료조건인 j == C - 1 까지 도착하게 되면 True를 반환하여 cnt를 증가시킨다. # 3109번 : 빵집 def solve(i,j): # 원웅이네 파이프로 무사..

알고리즘/Greedy 2022.05.04

[django] 프로젝트 배포 시 sqlite3 버전 오류

django프로젝트를 만든 후 aws나 gcp에 배포하려고 할 때 sqlite3의 버전 오류가 나는 경우가 많다. 이때 linux기반 OS에서 sqlite3를 쉽게 설치하는 방법이다. linux기반 지식이나 명령어들을 잘 몰라서 많이 해맸는데 아래의 명령어로 쉽게 해결할 수 있었다. 오류 내용 : django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17). sqlite3.9버전 이상을 설치해주어야 한다. koipkgs에 sqlite3 버전 별 설치파일들이 있고 이 파일들을 찾아서 다운로드 후 설치해주면 된다. 명령어 wget https://kojipkgs.fedoraproject.org//pack..

[django] django.db.utils.OperationalError: table already exist

에러 : table already exist 장고 migration시 table already exist 에러를 해결하는 과정에 대한 블로그입니다. 원인 아래와 같이 같은 이름의 테이블이 이미 존재하기 때문에 python manage.py migrate 할 수 없다는 에러메세지였다. 이 문제를 해결하려면 이미 존재하고 있는 테이블을 지우거나 수정해야 한다. 해결 python manage.py migrate --fake 을 입력하여 테이블이 없는 것으로 간주하고 새로 테이블을 만드는 명령어를 사용하면 됨.

Git 기초 명령어 정리

Git 기초 명령어 정리 git 을 사용하면서 자주 사용하게 되지만 자꾸 잊어버리는 명령어들을 정리한 것이다. git init : git 생성, 시작 git config --global user.name [user name] : git 계정 이름 변경, 수정 git config --global user.email [email address] : git 계정 email 변경, 수정 git clone [git_path] : github에 있는 repository 복사해오기. git status : 스테이징 영역(staging area)과 작업 디렉토리 영역(working directory area)을 확인하기 위해서 사용 Changes to be commited : 스테이징영역으로 넘어가있는 변경내용으로 c..

환경설정/Git 2022.04.26

백준 2847번: 게임을 만든 동준이 - 파이썬(greedy)

가장 높은 레벨이 가장 큰 점수를 얻어야 하는 문제인데 최소한의 횟수를 사용해야 하므로 점수 조정시 다음 레벨과의 점수 차이를 1로 만들어 주면 된다. 문제를 풀 때 주의해야 할 점은 높은 레벨에서부터 비교하면서 점수를 낮춰주어야 한다. 낮은 레벨부터 점수를 낮추게 되면 [5,5,5] > [4,5,5] > [4,4,5] 이런 식으로 점수가 오름차순이 되지 않을 수 있다. 실제로 처음에 이렇게 풀었다가 틀렸었다... # 2847번 : 게임을 만든 동준이 n = int(input()) levels = [] for _ in range(n): levels.append(int(input())) levels.reverse() cnt = 0 for i in range(n-1): while levels[i]

알고리즘/Greedy 2022.04.19

백준 1449번: 수리공 항승 - 파이썬(greedy)

문제를 풀기위해 생각해낸 방법은 "테이프로 막은 부분을 표시해두자" 이다. 표시를 하기 위해서 사용한 방법은 리스트를 넉넉한 크기로 만들어준 뒤 테이프로 막은 부분은 1로 표시하는 것이다. 그래서 변수 명도 flag 로 정했다. (항상 변수명을 정할 때 가장 고민을 많이 하는 것 같다...ㅎㅎ) # 1449번: 수리공 항승 N,L = map(int,input().split()) tape = list(map(int,input().split())) tape.sort() flag = [0 for i in range(10000)] cnt = 0 for i in tape: if flag[i] == 0: cnt += 1 for j in range(L): flag[i+j] = 1 print(cnt)

알고리즘/Greedy 2022.04.17