반응형

전체 글 138

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

[django] no such table: auth_user

python manage.py createsuperuser로 아이디와 패스워드를 만들려고 하는데 이런 오류가 뜬다. 구글링을 통해 찾아보니 말 그대로 DB에 테이블이 없어서 나타나는 문제점이라고 한다. 1. python manage.py makemigrations 2. python manage.py migrate 이 두가지 명령어를 순서대로 실행시켜서 migrate를 해주고 나서 다시 createsuperuser하면 된다. 장고 프로젝트를 새로 시작했을 때 기본적으로 세팅이 되어있는 모델들이 있는데 이 모델들도 맨 처음에는 migration을 해주어야한다. python manage.py makemigrations명령어는 모델에 변화가 있거나 모델을 새로 생성했을 경우 변경사항을 업데이트해주는 명령어다. ..

[django] 명령어 정리

django 명령어 정리 장고는 기본적으로 아래의 장고어드민(django-admin)이라는 명령어를 통해서 프로젝트와 앱을 실행시킬 수 있다. 프로젝트 생성 django-admin startproject [프로젝트 이름] 앱 생성 django-admin startapp [앱 이름] 서버시작 python manage.py runserver [포트번호] 장고로 프로젝트를 시작하면 manage.py라는 파일이 자동으로 생성되는데 이 파일이 있는 디렉토리에서 runserver와 포트번호를 붙여서 실행시키면 로컬 서버에서 장고프로젝트를 실행시킬 수 있게 된다! 아니 벌써 장고라는 틀을 가지고 일단 웹을 하나 찍어만들어보긴 한 셈이다. 짝짝짝!!! 이 외에도 django-admin을 치면 사용할 수 있는 명령어들이..

백준 2251번: 물통 - 파이썬(BFS)

빠트리지 않고 탐색하는 것과 이미 탐색했던 조합은 Pass할 수 있도록 알고리즘을 짜야 한다. 마지막으로 물통사이를 왔다갔다할 때 물이 넘치는지 모자라는지 체크하고 문제에서 요구한 조건(A의 통이 비어있을때)에 부합할때 C통에 남아있는 물을 저장해두면 된다. 참고 : https://pacific-ocean.tistory.com/392 # 2251번: 물통 a,b,c = map(int,input().split()) ans = [] from collections import deque q = deque() q.append([0,0,c]) check = [[0] * 201 for i in range(201)] ans = [0 for i in range(201)] def bfs(): while q: x,y,z ..

백준 2644번: 촌수계산 - 파이썬(DFS)

기본적인 탐색문제로 DFS,BFS알고리즘중 하나를 선택해서 풀면 된다. 나는 DFS를 이용해서 풀었고 DFS알고리즘은 재귀함수를 사용하기 때문에 미리 재귀깊이를 늘려놓는것이 편하다. dfs함수를 만들어주고 check라는 리스트에 계속해서 숫자를 더하는 방법으로 촌수를 계산해보았다. # 2644번: 촌수계산 import sys sys.setrecursionlimit(10*5) def dfs(node): for n in graph[node]: if check[n] == 0: check[n] = check[node]+1 dfs(n) n = int(input()) graph = [[] for _ in range(n+1)] s,e = map(int,input().split()) for _ in range(int(..

백준 11725번: 트리의 부모 찾기 - 파이썬(DFS)

이 문제는 루트노드가 1로 가정하고 있으므로 2번부터 n-1번까지 순서대로 노드들의 부모노드를 찾아서 출력해주면 되는 문제이다. 탐색문제이므로 dfs,bfs 등 편한 알고리즘을 사용하면 될 것 같다. 나는 dfs알고리즘을 이용해서 풀어보았다. 우선 dfs알고리즘을 사용할 때는 재귀의 깊이를 늘려놓는 것이 편하다. 그리고 트리구조를 표현할 때 인접리스트(adjacent list)방식으로 표현했다. 인접리스트만으로는 부모와 자식노드의 관계를 알 수는 없다. 따라서 parent리스트를 따로 만들어서 순서대로 부모노드를 넣어주었다. # 11725번: 트리의 부모 찾기 import sys sys.setrecursionlimit(10**6) n = int(input()) adj_list = [[] for _ in ..

백준 2583번: 영역 구하기 - 파이썬(DFS)

dfs방법으로 풀어보았다. 이번 문제에서는 print(*list)에 대해서 알 수 있게 되었다. 원래는 for 루프를 이용해서 sep연산자와 함께 사용해서 리스트를 출력했었는데 블로그를 통해서 리스트를 파이썬 *연산자와 함께 출력하면 깔끔하게 보기좋게 출력된다. 더 알아보고 싶으신 분들은 https://www.askpython.com/python/list/print-a-python-list https://www.daleseo.com/python-lists-print/ 위의 링크들 참조하면 좋을것 같다. import sys sys.setrecursionlimit(10000) m,n,k = map(int,input().split()) # 1. 그림그리기 graph = [[0]*n for i in range(..

백준 10026번: 적록색약 - 파이썬(DFS)

dfs로 탐색문제이다. dfs는 재귀,스텍 자료구조를 이용하는 알고리즘인데 어짜피 같은 원리이지만 나는 주로 재귀를 사용해서 문제를 푼다. dfs알고리즘은 문제를 반복적으로 풀어보게 되면 익숙해질것이고 이 문제는 적록색약(녹색과 빨간색을 구분 못하는 사람)을 신경써서 풀어줘야 하는데 나는 그냥 graph를 딥카피 한후에 R를 G로 바꿔버렸다. 반복문을 많이 쓰게 되서 시간초과가 날까 걱정이 되기도 했는데 일단 통과는 되었다. :) import copy import sys sys.setrecursionlimit(100000) n = int(input()) graph = [] for _ in range(n): i = list(map(str,input())) graph.append(i) graph2 = cop..