views.py & admin.py class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField(verbose_name='date_published') def __str__(self): return self.question_text 위와 같은 모델 하나가 정의되어있다고 가정하자 그리고 admin.py에 아래와 같이 입력해 어드민 사이트에 등록했다고 가정하자 admin.site.register(Question) 이 형태에서 기본적으로 아래와 같이 어드민 페이지에 데이터 입력창이 나온다 필드 분리 Document : https://docs.djangoproject.com/..
전체 글
주로 백엔드, 클라우드 인프라 주제를 다룹니다views.py & admin.py 아래와 같이 views.py에 Question모델 클래스가 정의되어있다고 가정하자 class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField(verbose_name='date_published') def __str__(self): return self.question_text 그리고 admin.py에 admin.site.register()를 통해서 모델을 등록하였다 admin.site.register(Question) 이제 admin사이트에 들어가서 새로운 데이터를 추가한다고 가정해보자. 기본적으로 모델의 필드 정의 순서대로인 qu..
제네릭스란? 제네릭스란 다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스 컴파일시 타입 체크를 해주는 기능이다. 객체 타입을 '컴파일 시' 체크하므로 안정성을 높이고 형변환의 번거로움이 줄어든다. 타입 안정성을 높인다는것은 의도하지 않은 타입의 객체가 저장되는것을 막는다는 소리이다. 정리해보면 제네릭스의 장점은 아래와 같다. 타입 안정성을 제공한다 타입 체크와 형변환을 생략할 수 있으므로 코드가 간결해진다. 제네릭을 적용한 제네릭 클래스 선언을 해보자 package generic; class Box{ T item; void setItem(T item){ this.item = item; } T getItem(){ return this.item; } } Box에서 'T'를 타입변수라고 하며 T가 아닌 다..
URL : https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 programmers.co.kr 문제를 해석해 보면 n개의 음이 아닌 정수들이 주어진다. 이 정수 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟넘버를 만드는 문제이다. 예를 들면 [1,1,1,1,1]과 타겟넘버 3이 주어지면 -1 + 1 + 1 + 1 + 1 -> 3 과 같은 경우를 말하는 것이다. 즉, 주어진 정수들에 대해 부호반전을 해준 정수 리스트와 주어..
1. Collection Framework? 컬렉션 프레임웍이란 데이터군을 저장하는 클래스들을 표준화한 설계를 의미한다. 여기서 프레임웍이란 표준화된 프로그래밍 방식을 의미한다. 2. 컬렉션 프레임웍의 핵심 인터페이스 컬렉션 프레임웍의 핵심 인터페이스는 세가지가 존재한다. List : 순서가 있는 데이터 집합, 데이터 중복을 허용한다 (ArrayList, LinkedList, Vector, Stack) Set : 순서가 유지되지 않는 집합, 데이터 중복을 허용하지 않는다.(HashSet, TreeSet) Map : 키 - 값 쌍으로 이루어진 데이터 집합. 순서는 유지되지 않으며 키는 중복을 허용하지 않고, 값은 중복을 허용한다 주의할 것은 위 세가지 모두 '인터페이스'라는 것이다. 그리고 여기서 공통점이..
변수 변수는 값을 저장하는 메모리 공간을 가리키는 이름이다. Go에서 변수 선언은 아래와 같은 형태로 선언한다 var (변수명) (자료형) = (초기화값) 변수의 4가지 속성 이름 : 프로그래머는 이름을 통해 값이 저장된 멤리 공간에 쉽게 접근이 가능하다 값 : 변수가 가리키는 메모리 공간에 저장된 값이다 주소 : 변수가 저장된 메모리 공간의 시작 주소를 말한다. 변수 이름이 메모리 시작 주소인 것이다. 타입 : 변수값의 형태를 말한다. 정수타입, 실수타입, 문자열타입 등 다양한 타입이 있다. 대입연산자는 다른 프로그래밍 언어와 동일하게 '='이다. 그리고 Go언어의 자료형 종류에는 아래 링크를 참조하자 https://hcnam.tistory.com/9 [GoLang] 자료형, 변수, 상수 자료형 Go ..
GO 언어가 실행되기 까지 GO언어는 우선 강타입을 가지는 정적언어이다. 기본적으로 컴파일을 가지고 있으며, 타입 검사에 있어 엄격한 언어이다. GO언어가 실행되기 까지의 과정은 아래와 같다. 폴더 생성 .go파일 생성 및 작성 Go모듈 빌드 빌드 실행 폴더 생성 GO언어에서 모든 코드는 '패키지 단위'로 작성된다. 같은 폴더에 속한 .go파일은 모두 같은 패키지에 포함되고, 패키지 명으로 폴더명을 사용한다. .go파일 생성 및 작성 Go언어의 코드는 .go라는 확장자로 끝나야 한다. Go모듈 생성 1.16버전부터 모든 Go코드는 빌드 전에 모듈을 생성해야한다. go mod init (프로젝트 / 모듈명) 명령어를 이용해 모듈을 생성해 준다. 모듈을 생성하면 go.mod라는 파일이 생성되는데, 이 파일에..
* 모든 설명은 M1맥북 기준으로 설명이 이루어집니다. 개발환경 구축하기 GO언어 개발환경을 구축해봅시다. https://go.dev/dl/ Downloads - The Go Programming Language Downloads After downloading a binary release suitable for your system, please follow the installation instructions. If you are building from source, follow the source installation instructions. See the release history for more information about Go releases go.dev 이곳을 들어가 최신 버전의 ..
모듈로 연산? 모듈로 연산은 어떠한 숫자를 다른 숫자로 나눈 나머지를 구하는 연산으로 나머지 연산(mod)라고 한다(프로그래밍 언어에서 %연산자를 의미한ㄷ.). 정수론에서 모듈로 연산이라는것이 있는데, 이는 정수의 합과 곱을 어떤 주어진 수의 나머지에 대해 정의하는 방법이다. 모듈로 연산은 아래 세가지를 충족시킨다고 한다. 나머지는 이 공식에 부합하지 않는다고 한다. (A + B) % C = ((A % C) + (B % C)) % C (A - B) % C = ((A % C) - (B % C)) % C (A * B) % C = ((A % C) * (B % C)) % C 유도해보기 A,B를 각각 위와 같이 정의하고 유도해보면 아래와 같다. 이 원리를 이용해 풀었던 문제이다. https://www.acmicp..
URL : https://www.acmicpc.net/problem/15624 15624번: 피보나치 수 7 첫째 줄에 n번째 피보나치 수를 1,000,000,007으로 나눈 나머지를 출력한다. www.acmicpc.net 문제 살펴보기 피보나치 관련 문제이다. 입력은 첫줄에 n이 주어지고 이 n은 1000000보다 작거나 같은 자연수 또는 0이다. 출력은 n번째 피보나치 수를 1000000007로 나눈 나머지를 출력하는 것이다. 문제 풀이 우선적으로 큰 수에 대한 피보나치 수이므로, 처음에 동적계획법을 이용해서 접근하였다. import sys sys.setrecursionlimit(10**6) saved = [None] * 10000001 def fibonacci(x): if x == 0: return..
동적 계획법이란? 동적계획법은 Dynamic Programming, DP라고도 불린다. 동적계획법은 하나의 문제를 "단 한번만" 푸는 문제이다. 분할정복과 비슷한 성격을 띄고있다. 단 다른 점이라면, 분할정복같은 경우에는 동일한 문제를 여러번 푼다는 점에 있어서 동적계획법과 차이가 있다. 동적계획법을 사용하는데에 있어 아래 두가지 조건을 만족해야한다. 큰 문제를 작은 문제로 나눌 수 있어야 한다 작은 문제에서 구한 정답이 큰 문제에서도 동일한 정답으로 적용해야한다. 동적계획법은 메모이제이션(Memoization)기법을 사용하면서 값을 구하게 된다. 메모이제이션이란, 이미 구한 답을 잠시 배열에 기록해두고, 나중에 동일한 연산을 할 때 사용한다는 기법이다. 분할정복에서의 비효율성 분할정복법의 비효율성은 대..
Collection Framework란 데이터 군을 저장하는 클래스들을 표준화한 설계를 의미한다. 컬렉션은 다수의 데이터를 의미하고, 프레임워크는 표준화된 프로그래밍 방식을 의미한다. 컬렉션 프레임 워크에서는 컬렉션데이터 그룹을 크게 3가지 타입이 존재한다 인식하고, 각 컬레션을 다루는데 필요한 기능을 가진 3개의 인터페이스를 정의한다. 여기서 세가지는 아래와 같다. List Set Map 이중 인터페이스 List,Set의 공통적인 부분을 뽑아 Collection을 추가로 정의하였다. Map은 공통적인 면이 아예 없어 독립적 인터페이스이다. 컬렉션데이터 그룹의 각각의 특징은 아래와 같다. List : 데이터 중복을 허용하고, 저장 순서가 유지된다. Set : 데이터 중복을 허용하지 않고, 저장 순서가 유..
URL : https://programmers.co.kr/learn/courses/30/lessons/17680# 2->1 만약 여기서 2번 캐시를 호출하는 경우에는 2번 캐시를 꺼내서 캐시의 맨 앞에 넣는다. 2 -> 3 -> 1 4번캐시를 넣어야한다고 가정하자. 근데 저장공간이 3인 캐시이므로 꽉찬 상태이다.이런 경우, 가장 사용을 안하고 있는 마지막 자리에 있는 1을 빼고, 4를 넣어준다. 4 -> 2 -> 3 (1은 캐시에서 제거) 정리해보면 아래와 같다. 캐시 공간이 남아있는 경우, 캐시에 넣는다 캐시가 가득차있는 경우, 가장 오래된 데이터를 제거하고 넣어준다 해당 데이터를 꺼낸다 꺼낸 데이터를 가장 최근 데이터 위치(캐시의 맨 앞)로 보낸다. 위 LRU개념을 가지고 문제에 주어진대로 풀면 아래..
URL : https://programmers.co.kr/learn/courses/30/lessons/42587 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린 programmers.co.kr 문제를 정리해 보자 인쇄 대기목록의 가장 앞에있는 문서를 대기목록에 꺼낸다(i라고 가정하겠다) 나머지 인쇄 대기목록에서 i보다 중요도가 높은 문서를 하나라도 존재하면, i를 대기목록 마지막으로 넣는다 없는경우에는 i를 인쇄한다. 예를 들어 문제에 제시된 4개의 문서 ABCD 대해 중요도가 [2,1,3,2]라고 한다면 아래와 같은 순서로 출력이된다 1) 2..
URL : https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 문제를 해석해보자 N장의 카드가 있다. 카드는 1부터 N까지의 번호가 붙어있으며, 1번카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여있다. 다음 두개 동작을 지속적으로 수행하며 한장 남을때 까지 반복하게 된다. 두가지 동작은 아래와 같다 가장 위에 있는 카드를 버린다 가장 위에 있는 카드를 카드의 마지막으로 옮긴다 N이 주어졌을때 제일 마지막에 남는 카드를 구하..
URL : https://level.goorm.io/exam/43246/%ED%81%90-queue/quiz/1 구름LEVEL 코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이 level.goorm.io 문제 조건들을 정리해보자 큐는 최대 10개의 자료가 들어갈 수 있고, 10개를 넘으면 overflow를 출력한다 큐가 비어있는 상태에서 Deque를 실행하면 underflow, 꽉 차있는 상태에서 Enque를 실행하면 overflow를 실행한다 프로그래밍 언어에서 제공하는 라이브러리를 사용하지 않고 문제 푸는것을 권장한다. 입력 조건들을..
웹 사이트를 설계할때 가장 먼저 해야할 일은 프로그램이 해야 할 일을 적당한 크기로 나누어 모듈화 하는 것이다. 이 경우에서 웹 사이트 전체 프로그램 또는 모듈화된 단위 프로그램을 애플리케이션이라고 한다. 장고에서는 이 애플리케이션 개념을 더 구체적으로 정의한다 프로젝트 : 웹 사이트에 대한 전체 프로그램을 의미 애플리케이션 : 모듈화된 단위 프로그램을 의미 즉, 애플리케이션 프로그램들이 모여 프로젝트가 되는것이다. Django는 MVT 패턴 스펙을 가진다 일반적으로 Java Spring Boot, Ruby on Rails 등과 같은 프레임워크들은 MVC(Model-View-Controller)패턴을 가진다. Model(데이터), View(사용자), Controller(로직)를 구분해 한 요소가 다른 요..
웹 서버와 웹 애플리케이션 서버 클라이언트로 부터 요청을 받아 처리하는 서버를 통칭해 '웹 서버'라고 부른다. 좀더 세분화 하면 '웹 서버'와 '웹 애플리케이션'으로 분류할 수 있다. 구분 역할 프로그램 명 웹 서버 웹 클라이언트의 요청을 받아 처리하고, 결과를 클라이언트에게 응답 Apache httpd, NGINX, IIS... etc 웹 애플리케이션 서버 웹 서버로부터 동적 페이지 요청을 받아 요청을 처리하고 결과를 웹서버로 반환한다. 주로 동적 페이지를 위한 프로그램 실행, 데이터 베이스 연동기능을 처리 Apache Tomcat, JBoss, uWSGI...etc 정적페이지 vs 동적페이지 정적페이지는 항상 같은 내용을 표시하는 웹페이지를 의미한다. 일반적으로 HTML/CSS/JavaScript +..
URL : https://programmers.co.kr/learn/courses/30/lessons/42584 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00 programmers.co.kr 문제를 요약해보면 입력으로 초단위로 기록된 주식 가격이 담긴 배열 prices가 주어지는데, 각 주식이 가격이 떨어지지 않는 기간은 몇초인지가 담긴 리스트를 return 하라는 문제이다. 접근법 각 요소들에 대해서 검사를 한다. 검사중인 요소 prices의 마지막 요소인 경우에는 떨어지는지 오르는지 알 수 없기..
URL : https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 문제를 간단히 요약해 보면 괄호기호로 구성되는 문자열을 PS(Parenthesis String)이라고 한다. 그중 올바른 괄호 문자열을 VPS(Valid PS)라고 부른다. 예를 들면 "((()))"는 VPS지만 "(()("같은 경우는 그냥 PS이다. 각 주어진 괄호 문자열이 VPS인지 판단해 결과를 YES 혹은 NO로 나타내어라 접근법 1 정석적인 스택 ..
URL : https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 기본적인 스택을 구현하는 문제이다. 조금 이상하게 풀어보고싶다는 이상한 생각이 들어 이상하게 풀어봤다. import re import sys class Stack(object): def __init__(self) -> None: self.stack = [] def push(self,x) -> None: self.stack.append(x) def pop(self) ->..
https://programmers.co.kr/learn/courses/30/lessons/42746?language=python3 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 문제를 파악해보자. 0 또는 양의 정수가 주어졌을때 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내는 문제이다. 제한 사항을 보면 numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다. 정답이 너무 클 수..
URL : https://programmers.co.kr/learn/courses/30/lessons/42748 코딩테스트 연습 - K번째수 [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3] programmers.co.kr 배열 array의 i번째 숫자부터 j번째 숫자까지 고르고 정렬한 후 k번째 수를 구하는 문제이다. 입력 형태는 아래와 같다. 기본적인 solution()함수의 매개변수로 array,commands를 받게되는 것이다. commands안에 각각의 상황에 따른 i,j,k값이 있고, 각 command별로 결과값들을 모아서 리스트로 반환하는 것이다. 아래와 같이 구현하였다 from typing import MutableSequ..
URL : https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 기본적인 정렬 문제이다. 첫번째 줄에 n을 받고 그 다음줄부터 총 n개의 수를 받아서, 정렬하는 문제이다. 버블정렬, 선택정렬, 삽입정렬, 퀵정렬, 파이썬 내장 sort, 숏코딩 총 6가지 방법으로 풀어보았다 from typing import MutableSequence ''' python short coding print(*sorted([int(input()) for _ in range(int..
정렬 알고리즘이란? 정렬알고리즘이란 키를 항목값의 대소관계에 따라 데이터 집합을 일정한 순서로 바꿔 늘어놓는 작업을 의미한다. 정렬에서 값을 나열하는것에 따라 두가지의 종류가 있다. 오름차순 : 값이 작은 데이터를 앞쪽에 늘어놓는것 내림차순 : 값이 큰 데이터를 앞쪽에 늘어놓는 것 정렬알고리즘은 어디에 활용이 되나? 파일 처리(파일 관리자의 파일 정렬) 데이터 베이스 전화번호부 주로 데이터를 일정하게 나열해야하는 상황에서 많이 쓰인다. 정렬 알고리즘에서 안정성 정렬알고리즘에는 "안정한 정렬" "불안정한 정렬" 두가지가 존재한다. 여러 정렬 알고리즘의 종류가 있는데, 앞으로 각 정렬알고리즘을 보면서 안정적인지, 불안정적인지 살펴볼 것이다. 추후 각 정렬별로 안정적인지, 안정적이지 않은지에 대해 다루어 볼 ..
예외와 에러의 차이점 에러(Error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류. StackOverflow에러나 OutOfMemory오류와 같이 발생하면 복구가 불가능한 심각한 오류이다 예외(Exception) : 발생하더라도 수습이 되는 덜 심각한 오류. 예외는 발생하더라도 적절한 코드를 작성해 비정상적 종료를 막을 수 있다. 자바 예외 클래스 계층 구조 Exception클래스도 기본적으로 Object클래스의 자손클래스이다. 또한 예외 클래스는 두 그룹으로 나눌 수 있다 Exception클래스와 그 자손들(RuntimeException, 이의 자손 제외) : 사용자의 실수와 같은 외적인 요인에 의해 발생되는 예외를의미한다. 존재하지 않는 파일을 입력한다거나(FileNotFoundExcep..
상속?? 포함관계?? 클래스를 작성하는데에 있어서 상속관계를 맺어줄 것인지, 포함관계를 맺어줄것인지를 고민해야한다. //상속 package Interface2; class point{ private int x; private int y; } class Circle extends point{ } public class inheritex { public static void main(String[] args){ } } //포함관계 package Interface2; class point{ private int x; private int y; } class Circle{ point p = new point(); } public class inheritex { public static void main(Stri..
내부클래스란 내부 클래스는 클래스 내에 선언되는 클래스 형태이다. 내부 클래스의 장점은 아래 두가지로 볼 수 있다. 내부 클래스에서 외부클래스의 멤버들을 쉽게 접근할 수 있다 코드의 복잡성을 줄 일 수 있다. package Interface2; class A{ class B{ } } 내부 클래스의 종류, 특징 내부 클래스종류는 변수 선언위치에 따른 종류와 동일하다. 종류와 특징은 아래와 같다. 내부클래스 특징 인스턴스 클래스 멤버변수 선언위치와 동일한 위치에 선언, 인스턴스 멤버처럼 다뤄진다. 주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용 스태틱 클래스 static멤버처럼 다루어진다. static메소드에서 사용될 목적으로 사용 지역 클래스 외부클래스 메소드나, 초기화 블록 안에 선언, 선언된 ..
인터페이스란? 인터페이스는 일종의 추상클래스이다. 추상클래스처럼 추상 메소드를 갖지만, 추상화 정도가 높아, 추상 클래스와 달리, 몸통을 갖춘 일반 메소드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상 메소드와 상수만 멤버로 가질 수 있다. 추상 클래스를 미완성 설계도로 본다면, 인터페이스는 기본 설계도라고 할 수 있다. 인터페이스 작성하기 인터페이스 작성은 클래스와 동일하다. 단, 키워드로 class가 아닌, interface를 작성한다. 인터페이스의 멤버들에는 일반적인 클래스, 멤버들과 달리 제약사항이 있다. 모든 멤버변수는 public static final이어야 하며(인터페이스는 멤버변수로 상수만 가질 수 있다) 이를 생략할 수 있다. 모든 메소드는 public abstract이어야하며, ..
추상클래스 추상클래스란, 미완성 설계도에 비유할 수 있다. 이는 단지, 미완성 메소드(추상메소드)를 포함하고 있다는 의미이다. 추상클래스 자체는 클래스로서 역할은 못한다. 하지만, 새로운 클래스를 만들때 바탕이 되는 클래스이다. 기본적인 형태는 이와같이 abstract를 붙여 클래스를 선언해 주면 된다.. abstract class test1{ } 추상클래스는 일반 클래스와 다르지 않다 생성자도 있으며, 멤버변수, 메소드도 가질 수 있다. 추상 메소드 추상 메소드는 선언부만 작성하고, 구현부는 작성하지 않은채로 남겨둔 것이다. 실제 수행할 내용을 작성한게 아니기 때문에 미완성 메소드인것이다. 이를 만든 이유는, 상속받는 클래스에서 내용이 달라질 수 있기 때문이다. 선언부만 작성하고, 주석으로 어떤부분을 ..