반응형

www.acmicpc.net/problem/1037

 

1037번: 약수

첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되

www.acmicpc.net

 

해당 문제는 N의 진짜 약수가 구해진다고 하였기 때문에 간단하게 가장 작은 수와 가장 큰 수를 곱하면 그 수가 N이 된다.

 

n = int(input())
N = list(map(int, input().split()))

N_max = max(N)
N_min = min(N)

print(N_max * N_min)
 
반응형
반응형

2020/05/28 - [python] - [python] Numpy

 

[python] Numpy

Numpy 란? C언어로 개발되었으며, 계산을 위한 라이브러리로서 다차원 배열을 처리하는데 필요한 기능을 제공합니다. Numpy 데이터 타입 # numpy : ndarray import numpy as np nn = [1, 2, 3.5] nn1 = (6,7,8,9)..

lightchan.tistory.com

 

Numpy에서 zeros / ones / full / eye 함수 

 

import numpy as np

c = np.zeros((2, 2))
print(c, end = '\n\n')

d = np.ones((2,2))
print(d, end = '\n\n')
d = np.full((2,2 ), 10)
print(d, end = '\n\n')

e = np.eye(3) # 3행 3열짜리 단위행렬
print(e, end = '\n\n')


# 출력 결과

[[0. 0.]
 [0. 0.]]

[[1. 1.]
 [1. 1.]]

[[10 10]
 [10 10]]

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

np.zeros((2,2)) 는 2 행 2 열 짜리 2차원 배열을 0 으로 초기화 하겠다는 의미입니다.

 

np.ones ((2,2)) 는 2행 2열 짜리 2차원 배열을 1로 초기값을 설정해주는 것입니다.

 

np.full ((2,2), 10) 의 경우는 2행 2열 짜리 2차원 배열을 10으로 초기화 하겠다는 의미입니다.

 

저 위치에 다른 정수를 넣을 경우 해당 정수로 초기화하며 출력합니다.

 

np.eye(3) 의 경우 단위 행렬을 만드는 함수로 안의 정수값에 해당하는 단위 행렬을 출력해줍니다. 여기서는 3,3ㄷ의 단위 행렬을 출력해줍니다.현재는 3단위 행렬이지만, np.eye(2)를 할 경우, 2x2 행렬이 만들어집니다.

 

 

Numpy 난수 값 얻기

np.random.seed(0) 

print(np.random.rand(3), end = '\n\n') 

print(np.random.randn(5), end = '\n\n')

print(np.random.randint(3, size=6), end = '\n\n')
print(np.random.randint(3, size=(3,4)), end = '\n\n')
print(np.random.randint(3, size=(3,4,5)), end = '\n\n')


print(list(range(3)), end = '\n\n')
print(np.arange(3), end = '\n\n')

f = {i:np.random.randn() for i in range(3)}
print(f, end = '\n\n')



# 출력 결과

[0.5488135  0.71518937 0.60276338]

[-2.2683282   1.33354538 -0.84272405  1.96992445  1.26611853]

[2 0 1 1 1 1]

[[0 1 0 0]
 [1 2 0 2]
 [0 1 1 2]]

[[[0 1 1 1 0]
  [2 0 2 2 0]
  [2 0 0 0 1]
  [1 2 0 0 1]]

 [[0 1 2 2 0]
  [1 1 1 1 2]
  [2 2 0 2 1]
  [0 1 2 0 0]]

 [[2 0 0 0 0]
  [0 0 2 0 2]
  [1 1 1 0 1]
  [1 1 0 1 2]]]

[0, 1, 2]

[0 1 2]

{0: -0.5058765397605117, 1: 0.42539339846964996, 2: -0.027971183469780222}

 

 

np.random.seed(0) 란 임의의 시드를 생성합니다. seed 안에 값을 넣으면 항상 같은 결과를 반환합니다

 

np.random.rand(3) 란 난수 발생 균등분포를 따르기 때문에 음수 값은 출력되지 않습니다.

 

np.dandom.randn(5) 란 표준 정규분포를 따르는 난수를 발생시킵니다. rand() 와는 다르게 음수도 출력합니다.

 

맨 처음 seed에 0을 넣줬기 때문에 현재는 반복하여 출력하여도 같은 결과만 출력하게 됩니다.

 

매 출력 다른 결과를 원하신다면 seed(0)에서 0을 빼시면 됩니다.

 

np.random.randint()는randint(정수값)의 범위 내에서 균일분포의 정수난수를 발생 시킵니다. 여기서

 

(np.random.randint(3, size=6) 는 0~2 사이의 정수난수를 발생기키고 size는 6개를 받도록 하였습니다.

 

np.random.randint(3, size=(3,4) 의 경우는 범위는 위와 동일하지만, size는 2행 3열의 2차원 배열을 출력합니다.

반응형
반응형

Numpy 란?

C언어로 개발되었으며, 계산을 위한 라이브러리로서 다차원 배열을 처리하는데 필요한 기능을 제공합니다.

 

 

Numpy 데이터 타입

# numpy : ndarray
import numpy as np

nn = [1, 2, 3.5]
nn1 = (6,7,8,9)
ss1 = ['tom', 'james', 'oscar']
ss2 = {'a' , 'b', 'c'}

print(nn, ' ', type(nn))
print(nn1, ' ' , type(nn1))
print(ss1, ' ' , type(ss1))
print(ss2, ' ' , type(ss2))

# 출력 결과

[1, 2, 3.5]   <class 'list'>
(6, 7, 8, 9)   <class 'tuple'>
['tom', 'james', 'oscar']   <class 'list'>
{'a', 'b', 'c'}   <class 'set'>

 

변수에 할당한 데이터와 출력 된 값 및 데이터 타입 형태를 보면 들어간 타입의 형태로 출력 되는 것을 알 수 있스니다.

 

서로 성격이 다른 타입일 경우 상위 타입을 따라서 출력됩니다.

 

- 바깥쪽이 가장 큰 상위 타입

str ( somplex ( float ( int ) ) )

 

Numpy 메모리 저장

 

파이썬과 Numpy가 차지하는 메모리에는 차이가 있다.

 

파이썬은 값에 상관없이 다 다른 메모리를 차지하는 특징이있습니다.

li = list(range(1,10))
print(li) # list 형태

print(id(li[0]), id(li[1]), id(li[2]), id(li[3]), id(li[4]), id(li[5]), id(li[6]), id(li[7]), id(li[8]))


# 출력 결과

[1, 2, 3, 4, 5, 6, 7, 8, 9]
10914496 10914528 10914560 10914592 10914624 10914656 10914688 10914720 10914752

 

출력 결과를 보시면 id 값이 전부 다른 것을 확인 할 수 있습니다.

 

반면, Numpy 의 경우 C의 배열을 사용하기 때문에 하나의 메모리 안에 데이터를 하나씩 쌓아두는 특징을 가지고 있습

니다.

 

 

numpy_arr = np.array(li)

print(id(numpy_arr[0]), id(numpy_arr[1]), id(numpy_arr[2]), id(numpy_arr[3]), id(numpy_arr[4]))


# 출력 결과

139921874137520 139921874137520 139921874137520 139921874137520 139921874137520

출력 되는 id의 값이 전부 동일한 것을 확인할 수 있습니다.

 

 

결과적으로, 데이터 분석을 할 경우 들어오는 데이터의 양이 많기 떄문에 python 의 list 를 사용하는 것이 아니라

 

Numpy의 array 배열을 사용하는 것이 더 적합한 것을 알 수 있습니다.

 

 

추가 - 위에 특징들로인해 python의 list 값에 *값 을 해주면 list를 값 만큼 반복하지만 Numpy 의 경우 각 요소들에 * 값

 

을 해주는 특징을 가집니다.

print('a ' * 10)

for i in li:
  print(i*10, end = ' ')
  

# 출력 결과

a a a a a a a a a a 
10 20 30 40 50 60 70 80 90 

 

Numpy 배열

넘파이에서 사용하는 배열은 주로 벡터와 행렬을 사용하는 선형대수 계산에 사용됩니다.

 

1차원 배열 - 리스트를 넣으면 배열로 변환

exarr = np.array([1,2,3,4,5,6,7,8,9])


# 출력 결과

[1 2 3 4 5 6 7 8 9]   <class 'numpy.ndarray'>

 

2차원 배열 - 리스트의 리스트(list of list)를 이용하는 경우 2차원 배열을 생성할 수 있습니다. 가로는 행의 개수 세로는 열의 개수가 됩니다.

 

exarr1 = np.array([[1,2,3,4],[5,6,7,8]])
print(exarr1, ' ' , type(exarr1))


# 출력 결과

[[1 2 3 4]
 [5 6 7 8]]   <class 'numpy.ndarray'>

Numpy 에서의 배열은 다른 배열과는 다른 차이점을 가지고 있습니다.

 

예를들어 아래 소스에서도 보여드리겠지만, arr[0] 과 arr[[0]] dms 다른 점을 가지고 있습니다.

 

arr[0] 은 1차원 배열 , arr[[0]] 은 2차원 배열이라는 특징을 가지고 있습니다.

 

import numpy as np

arr1 = np.array([[10,20,30], [40,50,60]], dtype='float32')
print(type(arr1), ' ' , arr1.dtype, ' ' , arr1.shape, ' ' , arr1.ndim, ' ' , arr1.size, end = '\n')

print(arr1, end = '\n\n')

print(arr1[0,0], arr1[0, 1], end = '\n\n')
arr1[0] = 10
print(arr1[0,1], arr1[0,2], end = '\n\n')

print('-------------------------')

print(arr1, end = '\n\n')

print(arr1[[0]], end = '\n\n')

print(arr1[[0,1]], end = '\n\n')

print(arr1[0], end = '\n\n')


# 출력결과

<class 'numpy.ndarray'>   float32   (2, 3)   2   6
[[10. 20. 30.]
 [40. 50. 60.]]

10.0 20.0

10.0 10.0

-------------------------

[[10. 10. 10.]
 [40. 50. 60.]]

[[10. 10. 10.]]

[[10. 10. 10.]
 [40. 50. 60.]]

[10. 10. 10.]

 

 

 

위에 소스를 보시면 arr1[0]은 1차원 배열로 list 형태인 것을 알 수 있으며,

 

그 다음 줄 arr1[[0]] 인 경우는 arr1[0]과 다르게 0 행 1열의 2차원 배열을 의미하며 [[10. 10. 10]] 을 출력하였습니다.

 

 

반응형
반응형

2020/05/19 - [Django] - [Django] Application

 

[Django] Application

각각의 역할에 대해 간단하게 정리한 내용은 아래 포스팅글 참고해주세요 2020/05/18 - [Django] - Django 란 ? Django 란 ? 각각의 .py 파일들이 하는 역할은 다음과 같습니다. urls.py - URL 요청을 처리, URL을.

lightchan.tistory.com

2020/05/19 - [Django] - [Django] Template

 

URLS 를 어떤 용도로 사용하는지 이전 포스팅을 참고하면 좋을 것 같습니다.

 

urls의 형태는 다음과 같습니다.

 

urlpatterns = [
    path(url경로, view, {key:values}, name),
]

path의 1번째 위치는 url경로,

2번째 위치는 출력할 view,

3번째 위치는 딕셔너리 형태인 {key:values}

4번째 위치는 장고의 위치의 상관 없이 참조할 이름을 정해줍니다.

앞의 2개는 필수지만 뒤에 2개는 옵션 선택사항입니다

 

아래 사진을 보시면 urls가 2개가 생성되어있습니다. 그 이유는 프로젝트에 여러개의 APP이 존재하는데 모든 urls의 내용을 프로젝트 root의 urls에 다 넣으면 복잡해지고 찾기 힘들어 지기 때문에 각각의 APP 안에 urls를 만들어주면 보다 더 효율적으로 사용할 수 있습니다.

 

 

프로젝트의 root urls.py 의 url 매핑을 다음과 같이 해줍니다.

urlpatterns = [
    path('admin/', admin.site.urls),
    
    path('', views.Main), # myboard의 views의 Main
    path('board/', include('myboard.urls')),

]

3번째에 작성되어있는 path 경로를 보시면 

path('board/, include('myboard.urls')) 라고 작성되어있습니다.

이 뜻은 url뒤에 board/를 만나면 myboard 폴더의 urls.py 를 찾아가는 의미가 되겠습니다.

 

 

 

반응형

'Django' 카테고리의 다른 글

[Django] GET & POST 방식 웹 출력  (0) 2020.05.21
[Dango] DB 연결 및 Migrate  (0) 2020.05.21
[Django] Model  (0) 2020.05.20
[Django] Template  (0) 2020.05.19
[Django] View  (0) 2020.05.19
반응형

앞서 포스팅한 APP 생성, Template 설정, Model 구성이 완료가 되었다면,

 

DB 설정 및 makemigrations -> migrate 과정을 수행해주도록 하겠습니다.

 

 

- makemigrations , migrate 작업

 

모델에 만든 클래스들에 맞는 스키마를 생성하고 수정 가능하도록 하기 위해 다음과 같은 명령어를 차례대로 실행합니다

해당 명령어를 수행하면 APP 하위 폴더에 있는 migrations 폴더에 파일이 생성된 것을 확인 하실 수 있습니다.

 

python manage.py makemigrations
python manage.py migrate

 

0001_inital.py

 

- DB 설정 변경

 

urls.py 로 가서 다음과 같은 부분을 변경해주도록 합니다.

 

 

ALLOWED_HOSTS = [] 부분에는 자신의 ip 또는 127.0.0.1 을 기재 해주시거나 둘다 해당 가능하게 하고 싶다면 위의 사진처럼 '*'로 해주도록 합니다.

 

INSTALLED_APPS = [] 영역에는 자신이 만든 APP 이름을 작성해주도록 합니다.

 

 

다음으로 이 부분을 수정해주도록 합니다. 현재는 프로젝트 생성시 기본을 sqlite3으로 지정했기 때문에 다음과 같이 작성되어있습니다.

 

저는 다음과 같이 수정하였습니다.

 

 

'ENGINE' 영역 mysql 또는 mariadb 인경우 저처럼 작성해주고, 오라클의 경우에는 mysql 대신 oracle이라고 작성해주시면 됩니다.

'NAME' 에는 자신이 사용할 DB명을 입력해주도록 합니다.

그 외의 것들은 생략하도록 하겠습니다.

반응형

'Django' 카테고리의 다른 글

[Django] GET & POST 방식 웹 출력  (0) 2020.05.21
[Django] URLS  (0) 2020.05.21
[Django] Model  (0) 2020.05.20
[Django] Template  (0) 2020.05.19
[Django] View  (0) 2020.05.19
반응형

2020/05/19 - [Django] - [Django] Template

 

Model이란?

 

- 장고에서 모델은 레이아웃 역할을 담당하고 있으며, 클래스로 테이블의 역할을 한다고 이해하면 될 것 같습니다.

- 해당 소스코드는 models.py 에 작성

 

다음과 같은 형태로 작성되는 것을 확인할 수 있습니다.

 

 

models에서 사용하는 대표적인 데이터 타입

CharField() 제한을 둘 수 있는 문자형 타입
'max_length = 숫자'를 입력하면 그 길이만큼 제한
TextFieldTextField() 데이터의 길이가 큰 경우 사용
IntegerField() 32비트의 정수형 형태
BooleanField() True False 의 경우 사용하며, Null은 앞에 Null을 추가해준다.
DateTimeField() 날짜와 시간 나타낼 때 사용. 날짜만 사용하고 싶다면 DateField, 시간만 사용하고 싶다면 TimeField를 사용한다.
DecimalField() 소수점을 이용해야 하는 경우 사용

 

 

반응형

'Django' 카테고리의 다른 글

[Django] URLS  (0) 2020.05.21
[Dango] DB 연결 및 Migrate  (0) 2020.05.21
[Django] Template  (0) 2020.05.19
[Django] View  (0) 2020.05.19
[Django] Application  (0) 2020.05.19
반응형

Template 란?

 

- 얻은 데이터들을 포함한 웹 HTML 파일입니다.

 

- App 폴더 밑에 "templates" 라는 폴더를 만들고 그 안에 파일(*.html)을 생성

 

- 이는 App이 1개이거나 동일 템플릿명이 없을때 사용할 수 있다.

 

 

 

 

이제 view로 가서 어떻게 데이터를 가공할 뿌려줄지 정의할 함수를 만들어줍니다.

 

형태는 다음과 같습니다.

 

def 함수명(request):
	return render(request, '템플릿파일', 'Optional로 dict type 데이터 전달')

 

템플릿에서 사용하는 것들

템플릿 변수

 

템플릿 변수는 {{  }} 의 형태로 만들어 값이 해당 위치인 {{ }} 안에서 치환되며, 변수에는 변수 혹은 객체의 속성을 가질 수 있습니다.

 Name : {{ name }}

 

템플릿 태그

 

if문의 경우

{% if 조건 %}
	소스코드
{% else %}
	소스코드
{% endif %}



for문의 경우


{% for d in data %}
	반복할 소스코드
{% endfor %}

템플릿 태그 사용 후, 해킹 방지를 위해서

 {% csrf_token %}

를 추가해주셔야 합니다

반응형

'Django' 카테고리의 다른 글

[Dango] DB 연결 및 Migrate  (0) 2020.05.21
[Django] Model  (0) 2020.05.20
[Django] View  (0) 2020.05.19
[Django] Application  (0) 2020.05.19
[Django] 프로젝트 설정 준비  (0) 2020.05.18
반응형

2020/05/19 - [Django] - [Django] Application

 

[Django] Application

각각의 역할에 대해 간단하게 정리한 내용은 아래 포스팅글 참고해주세요 2020/05/18 - [Django] - Django 란 ? Django 란 ? 각각의 .py 파일들이 하는 역할은 다음과 같습니다. urls.py - URL 요청을 처리, URL을.

lightchan.tistory.com

 

Django에서 View 역할 ?

 

- MVC 패턴의 웹 개발에서 Controller와 비슷한 역할을 합니다.

 

- View는 적절한 데이터를 모델로부터 얻어와 웹 페이지 결과를 도출할 수 있도록 컨트롤하는 역할을 한다.

 

- views.py 에 각 함수는 각각의 View를 정의해줍니다.

 

def MainFunc(request):
    return render(request, 'main.html')

 

해당 함수에서는 요청이 들어오면 'main.html'로 가도록 설정되어있습니다.

 

장고는 MTV( Model, Template, View ) 패턴을 따르고 있습니다.

 

Model

- 클래스를 만드는 역할이며, 데이터를 출력 시키는 모델을 생성합니다.

- 하나의 클래스는 DB에서 테이블 역할도 해줍니다.

 

Template

- HTML 파일로 화면에 출력해줄 웹 페이지를 해당 위치에 만들어줍니다.

 

View

- 메소드를 통하여 받으며, HTTPRequest를 받아 HTTPResponse로 응답해줍니다.

 

반응형

'Django' 카테고리의 다른 글

[Django] Model  (0) 2020.05.20
[Django] Template  (0) 2020.05.19
[Django] Application  (0) 2020.05.19
[Django] 프로젝트 설정 준비  (0) 2020.05.18
Django 란 ?  (0) 2020.05.18

+ Recent posts