www.acmicpc.net/problem/11651

 

11651번: 좌표 정렬하기 2

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

코드:

def solution(count):
    data = []
    for _ in range(count):
        temp = []
        x,y = map(int,input().split())
        temp.append(x)
        temp.append(y)
        data.append(temp)
    data.sort(key=lambda x: (x[1],x[0]))
    for i in range(len(data)):
        print(f'{data[i][0]} {data[i][1]}')



N = int(input())
solution(N)

'Algorithm' 카테고리의 다른 글

BOJ - 15649번 - N과 M (1)  (0) 2021.04.15
BOJ - 18870번 - 좌표 압축  (0) 2021.04.08
BOJ - 11650번 - 좌표 정렬하기  (0) 2021.04.08
BOJ - 10814번 - 나이순 정렬  (0) 2021.04.08
BOJ - 2108번 - 통계학  (0) 2021.04.08

www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

코드:

def solution(count):
    data = []
    for _ in range(count):
        x,y = map(int,input().split())
        temp = []
        temp.append(x)
        temp.append(y)
        data.append(temp)
    data.sort(key=lambda x: (x[0],x[1]))
    for i in range(len(data)):
        print(f'{data[i][0]} {data[i][1]}')

N = int(input())
solution(N)

'Algorithm' 카테고리의 다른 글

BOJ - 18870번 - 좌표 압축  (0) 2021.04.08
BOJ - 11651번 - 좌표 정렬하기 2  (0) 2021.04.08
BOJ - 10814번 - 나이순 정렬  (0) 2021.04.08
BOJ - 2108번 - 통계학  (0) 2021.04.08
BOJ - 1427번 - 소트인사이드  (0) 2021.04.08

www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

코드:

def solution(count):
    data = []

    for _ in range(count):
        data.append(list(input().split()))

    data.sort(key=lambda x: int(x[0]))

    for i in range(len(data)):
        print(f'{data[i][0]} {data[i][1]}')


N = int(input())
solution(N)

'Algorithm' 카테고리의 다른 글

BOJ - 11651번 - 좌표 정렬하기 2  (0) 2021.04.08
BOJ - 11650번 - 좌표 정렬하기  (0) 2021.04.08
BOJ - 2108번 - 통계학  (0) 2021.04.08
BOJ - 1427번 - 소트인사이드  (0) 2021.04.08
BOJ - 1181번 - 단어 정렬  (0) 2021.04.08

www.acmicpc.net/problem/2108

 

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net

코드:

from collections import Counter
import sys


def average(data):
    avg = sum(data) / len(data)
    return round(avg)


def mid_value(data):
    if len(data) == 1:
        return data[0]
    else:
        return data[len(data)//2]


def mode(data):
    if len(data) == 1:
        return data[0]
    counter = Counter(data).most_common()
    if counter[0][1] == counter[1][1]:
        return counter[1][0]
    else:
        return counter[0][0]


def scope(data):
    if len(data) == 1:
        return 0
    else:
        return data[len(data)-1] - data[0]



# 데이터 입력받기
N = int(sys.stdin.readline())
data = []

for _ in range(N):
    data.append(int(sys.stdin.readline()))

data = sorted(data)
# 산술평균
print(average(data))
# 중앙값
print(mid_value(data))
# 최빈값
print(mode(data))
# 범위
print(scope(data))

'Algorithm' 카테고리의 다른 글

BOJ - 11651번 - 좌표 정렬하기 2  (0) 2021.04.08
BOJ - 11650번 - 좌표 정렬하기  (0) 2021.04.08
BOJ - 10814번 - 나이순 정렬  (0) 2021.04.08
BOJ - 1427번 - 소트인사이드  (0) 2021.04.08
BOJ - 1181번 - 단어 정렬  (0) 2021.04.08

www.acmicpc.net/problem/1427

 

1427번: 소트인사이드

첫째 줄에 정렬하고자하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

코드:

import sys


def solution(data):
    list = []
    for i in range(len(data)):
        list.append(int(data[i]))
    sorted_list = sorted(list, reverse=True)
    for i in range(len(sorted_list)):
        print(sorted_list[i], end="")


# 종료 문자 제거
N = sys.stdin.readline().strip()
solution(N)

'Algorithm' 카테고리의 다른 글

BOJ - 11651번 - 좌표 정렬하기 2  (0) 2021.04.08
BOJ - 11650번 - 좌표 정렬하기  (0) 2021.04.08
BOJ - 10814번 - 나이순 정렬  (0) 2021.04.08
BOJ - 2108번 - 통계학  (0) 2021.04.08
BOJ - 1181번 - 단어 정렬  (0) 2021.04.08

 

www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

문제

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로

입력

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

출력

조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.

예제 입력 1

13

but

i

wont

hesitate

no

more

no

more

it

cannot

wait

im

yours

예제 출력 1

i

im

it

no

but

more

wait

wont

yours

cannot

hesitate

출처

  • 문제를 만든 사람: author5

풀이

def solution(count):
    data = []
    for _ in range(count):
        data.append(input())
    data.sort(key= lambda x: (len(x),x))
    for i in range(len(data)):
    	# 중복 단어 출력 방지
        if i > 0 and data[i] == data[i-1]:
            continue
        print(data[i])


N = int(input())
solution(N)

 

'Algorithm' 카테고리의 다른 글

BOJ - 11651번 - 좌표 정렬하기 2  (0) 2021.04.08
BOJ - 11650번 - 좌표 정렬하기  (0) 2021.04.08
BOJ - 10814번 - 나이순 정렬  (0) 2021.04.08
BOJ - 2108번 - 통계학  (0) 2021.04.08
BOJ - 1427번 - 소트인사이드  (0) 2021.04.08

파이썬 웹 프레임워크 중에 가장 많이 사용되고 있으며, 2003년 로렌스 저널 - 월드 신문을 만들던 웹 개발팀의 내부 프로젝트 시작, 2005년 오픈소스 프로젝트로 공개되었다. 구글의 앱 엔진에서 장고를 사용하면서 많은 사람들이 사용하게 되었고, 현재는 파이썬의 대표적인 웹 프레임워크로 자리매김 하였다.

 

- Django의 특징

  • MVC 패턴 기반 MVT : MVC(Model- View - Controller)를 장고에서는 View를 Template, Controller를 View라고 한다. 

 

  • 객체 관계 매핑 : 장고의 객체 관계 매핑(ORM: Object Relation Mapping)은 데이터베이스 시스템과 모델이라는 파이썬 클래스를 연결시키는 다리와 같은 역할을 합니다. SQL 문장을 사용하지 않고도 테이블을 조작할 수 있습니다. 이미 구축한 데이터베이스 시스템을 다른 데이터베이스로 변경하는 경우에도 설정을 조금만 변경하면 가능하다.

 

  • 자동으로 구성되는 관리자 화면: 장고는 프로젝트를 시작하는 시점에 기본 기능으로 관리자 화면을 제공한다. 개발자가 별도로 관리 기능을 개발할 필요가 없다.

 

  • 우아한 URL 설계: 장고에서는 우아한 URL 방식을 채택하여 URL을 직관적이고 쉽게 표현할 수 있다. 또한 정규 표현식을 사용하여 복잡한 URL도 표현 가능하고, 각 URL 형태를 파이썬 함수에 1:1로 연결하도록 되어있어 개발이 편리하다.

 

  • 자체 템플릿 시스템: 내부적으로 확장이 가능하고 디자인이 쉬운 강력한 템플릿 시스템을 가지고 있다. 화면 디자인과 로직에 대한 코딩을 분리하여 독립적으로 개발이 가능하다. 장고 템플릿 시스템은 HTML과 같은 텍스트형 언어를 쉽게 다룰 수 있도록 개발되었다.

 

  • 캐시 시스템: 캐시 시스템을 이용하여 자주 이용되는 내용을 저장해 두었다가 재사용하면 성능을 높일 수 있다. 캐시용 페이지를 메모리, 데이터베이스 내부, 파일 시스템 중 아무 곳에나 저장할 수 있다. 또한 캐시 단위를 페이지에서부터 사이트 전체 또는 특정 뷰의 결과, 템플릿의 일부 영역만을 지정하여 저장할 수 있다.

 

  • 다국어 지원: 동일한 소스코드를 가지고 다른 나라에서도 사용할 수 있도록 다국어 환경을 제공합니다.

 

  • 풍부한 개발 환경: 테스트용 서버등 개발에 도움이 될 수 있는 여러 가지 기능을 제공합니다.

 

  • 소스 변경사항 자동 반영: 개발 중 *.py 파일의 변경 여부를 감지하게 되면 실행 파일에 변경 내역을 바로 반영해준다. 웹 서버를 다시 시작할 필요 없이 자동으로 새파운 파일이 반영됩니다.

 

출처: 한빛미디어, Django로 배우는 쉽고 빠른 웹 개발 파이썬 웹 프로그래밍

파이썬에는 WSGI(Web Server Gateway Interface)규격이 정의되어 있다. 파이썬 애플리케이션은 이 규격을 준수해야한다.

WSGI는 웹 서버와 웹 애플리케이션을 연결해주는 규격으로, 장고와 같은 파이썬 웹 프레임워크를 개발하거나, 이런 웹 프레임워크를 아파치와 같은 웹 서버와 연동할 때 사용한다. 파이썬 표준 라이브러리에는 과거 CGI 규격을 위한 cgi 모듈과 개선된 WSGI 규격을 구현하기 위한 WSGI 규격을 구현하기 위한 wsgiref 모듈이 같이 존재한다.

 

- WSGI 개요

CGI의 단점인 요청이 들어올 때마다 처리를 위한 프로세스가 생성되는 방식을 해결하고, 파이썬 언어로 애플리케이션을 좀 더 쉽게 작성할 수 있도록 웹 서버와 웹 애플리케이션 간에 연동 규격을 정의한 것이 WSGI 규격이다.

 

그렇기 때문에 파이썬에서는 WSGI 규격를 준수한다면 어떤 웹 서버에서도 파이썬 애플리케이션을 실행할 수 있다. 예를 들면 장고로 웹 애플리케이션을 작성하면 Apache, Nginx 웹 서버에서도 실행할 수 있다. 이때 유의해야 될 점은 Apache나 Nginx는 일반 범용 웹 서버로, WSGI 처리 기능이 없다는 것이다. 그렇기 때문에 이런 웹 서버와 파이썬 웹 애플리케이션 중간에서 WSGI 통신 규격을 처리해주는 것이 mod_wsgi, uWSGI, Gunicorn과 같은 WSGI서버이다.

 

 

출처: 한빛미디어, Django로 배우는 쉽고 빠른 웹 개발 파이썬 웹 프로그래밍

 

+ Recent posts