반응형

전체 글 135

(파이썬 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)]..

백준 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 ..

백준 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]..

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

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

[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]

백준 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)

백준 1543번: 문서 검색 - 파이썬(greedy)

# 1543번: 문서 검색 doc = input() word = input() length = len(word) flag = [0 for i in range(len(doc))] cnt = 0 for i in range(len(doc)): if flag[i] == 1: continue if word == doc[i:i+length]: cnt += 1 for idx in range(i,i+length): flag[idx] = 1 print(cnt) 중복 값을 어떻게 처리하면 좋을지 생각하다가 리스트를 사용해서 한번 본 문자의 인덱스에 표시를 해두는 것으로 구현해보았다. 다행히 한 번에 통과가 되었다. 그런데 이번 문제를 풀면서 새롭게 알게 된 부분은 리스트 슬라이스 작업에는 index out of range..