전체 글 47

[Django]장고 fbv vs cbv(cbv 이용 가이드 라인)

VIEW? 장고는 MTV(Model-Template-View) 패턴을 기반으로 하는 프레임 워크이다. 여기서 view는 MVC Framework에서 말하는 Controller와 비슷한 역활이다.(동일하지는 않다.) view는 장고에서 모델로 부터 데이터를 불러오거나 저장하며 http request를 받아 결과인 http response를 리턴한다. view의 작성 방법은 2가지가 존재한다. 1. fbv (함수 기반 뷰) 2. cbv (클래스 기반 뷰) fbv (함수 기반 뷰) # views.py @api_view(['GET', 'POST']) def index(request): if request.method == 'POST': return HttpResponse("Post method") else: r..

web/Django(장고) 2021.10.31

개미수열 알고리즘 파이썬

개미수열이란? 앞의 수를 연속된 같은 수의 개수로 묶어서 읽는 방식으로 만들어지는 수열로 1, 11, 21, 1211, 111221, 312211, 13112221, 1113213211 이런 식으로 진행된다. 개미수열 알고리즘(파이썬) n=int(input()) s='1' #수열의 시작이 1이기 때문에 for i in range(n): x=s[0] count=1 s_dev='' for j in range(1,len(s)): if s[j]!=x: s_dev+=str(count)+str(x) x=s[j] count=1 else: count+=1 s=s_dev+str(count)+str(x) print(s)

알고리즘 2021.10.15

프로그래머스 하노이의 탑 (파이썬 풀이)

https://programmers.co.kr/learn/courses/30/lessons/12946?language=python3 코딩테스트 연습 - 하노이의 탑 하노이 탑(Tower of Hanoi)은 퍼즐의 일종입니다. 세 개의 기둥과 이 기동에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대 programmers.co.kr 내가 한 풀이 n=1일 경우 1번 탑에서 3번 탑으로 이동 = 1 n=2일 경우 1번 탑에서 1번째 판 2번 탑으로 이동 1번 탑에서 2번째 판 3번 탑으로 이동 2번 탑에서 1번째 판 3번 탑으로 이동 => n=1일 경우 3번 반복 n=3일 경우 1번 탑에서 1,2번째 판 2번 탑으로 이동 => n=2일 경..

language/python 2021.10.15

백준 [2252] 줄 세우기 (파이썬 풀이)

https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의 www.acmicpc.net 이 문제는 두 학생의 키 순서를 입력값으로 받기 때문에 위상 정렬 알고리즘을 사용해서 풀이해야한다. 위상 정렬이란? 순서가 정해진 작업을 순차적으로 진행할 때 그 순서를 구하는 알고리즘이다. 작업에는 이 작업을 하기 전 수행하는 선행 작업을 위배 하지 않으면서 순서를 나열해야 한다. 위상정렬의 조건 DAG(Directed Acyclic Graph) 이여야..

코테 공부 2021.10.08

백준[16464] 소수의 연속합 (파이썬 풀이)

https://www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 내가 한 풀이 1 (시간 초과) def is_prime(x): for i in range(2,x): if x%i==0: return False return True n=int(input()) arr=[] for i in range(2,n+1): if is_prime(i): arr.append(i) else: pass start,end=0,0 com=0 answer=0 while True: if com>n: com-=arr[start] start+=1 elif com==n: answer+=1 com-=arr[start..

코테 공부 2021.10.08

투포인터 알고리즘 Two Pointers algorithm (파이썬)

투포인터 알고리즘 : 리스트에 순차적으로 접근해야 할때 두 개의 점의 위치를 기록하면서 처리하는 알고리즘 ex) 주문서 10개 중 1번부터 3번 주문서 총액을 계산할 때 시작점은 1번 주문서, 끝 점은 3번 주문서가 된다. 주어진 리스트 중 특정한 합을 가지는 수열 찾기 현재 주어진 리스트= [1,2,4,6,8] 에서 합이 6인 수열의 개수 찾기 count, start와 end는 0 부터 시작한다. 만약 start부터 end까지 수열의 합이 6을 넘지 않는다면 end를 1 증가시킨다. start부터 end까지 수열의 합이 6을 넘었다면 합에서 start 번째 수를 뺀뒤, start를 1증가시킨다. 수열의 합이 6이라면 count를 1 증가시킨다. 이 과정을 end가 리스트 끝에 도달할때 까지 반복한다. ..

알고리즘 2021.10.07

백준[1931] 회의실 배정 (파이썬 풀이)

https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 내가 한 풀이 이전에 풀었던 신입사원 문제와 매우 유사하다. n= int(input()) meetings=[] for i in range(n): meetings.append(list(map(int,input().split(" ")))) meetings=sorted(meetings,key=lambda x: (x[1],x[0])) Max=meetings[0][1] cnt=1 for i in range(1,n): if meetings[i][0]>=Max: Max=meetings[i][1] cnt+=1 print(cnt..

코테 공부 2021.10.07

백준[1700] 멀티탭 스케줄링 (파이썬 풀이)

https://www.acmicpc.net/problem/1700 1700번: 멀티탭 스케줄링 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전 www.acmicpc.net 내가 한 풀이 이 문제는 두 가지 경우로 크게 나눌 수 있다. 교체가 필요 없는 경우 1) 이미 해당 가전제품이 멀티탭에 꽂혀있는 경우 2) 멀티탭이 빈경우 -> 빈 곳에 가전제품 꽂으면 됨 교체가 필요한 경우에는 현재 멀티탭에 꽂힌 제품들이 이후에 사용되는지, 더 빨리 사용되는지 체크해야한다. n,k=map(int,input().split(" ")) pattern=list(map(int,inpu..

코테 공부 2021.10.07

백준[1946] 신입사원 (파이썬 풀이)

https://www.acmicpc.net/problem/1946 1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net 내가 한 풀이 "서류"를 기준으로 지원자를 정렬한다. 이때 면접 최고 순위(Max)를 서류 1등 지원자의 면접 순위로 지정한다. (서류 1등은 합격 확정이기 때문에) 1부터 지원자의 수만큼 for 문을 돌면서 지원자의 면접 순위가 Max 보다 작다면(높다면) 합격자수를 추가하고 Max를 갱신한다. import sys input=sys.stdin.readline n=int(in..

코테 공부 2021.10.07

백준[4769] 캠핑 (파이썬 풀이)

https://www.acmicpc.net/problem/4796 4796번: 캠핑 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다. www.acmicpc.net 내가 한 풀이 i=1 while True: l,p,v=map(int,input().split(" ")) days=0 if l+p+v==0: break else: x,y=divmod(v,p) days+=x*l+min(y,l) #나머지 y가 l 보다 클 수 있음으로 둘 중 최소값을 더해준다. print(f"Case {i}: {days}") i+=1

코테 공부 2021.10.07