반응형

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

예제 입력 1 복사

10 5 2 3 1 4 2 3 5 1 7

예제 출력 1 복사

1 1 2 2 3 3 4 5 5 7

 

import sys

n = int(sys.stdin.readline())
array = [0] * 10001

for i in range(n):
	data = int(sys.stdin.readline())
    array[data] += 1

for i in range(10001):
	if array[i] != 0:
    	for j in range(array[i]):
        	print(i)
반응형

'Algorithm Study > Baekjoon' 카테고리의 다른 글

1074. Z  (0) 2020.01.09
2747.피보나치 수  (0) 2020.01.09
10814.나이순 정렬  (0) 2020.01.09
11650. 좌표 정렬하기  (0) 2020.01.07
1427. 소트인사이드  (0) 2020.01.05
반응형

문제

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

입력

첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)

둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.

출력

첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.

예제 입력 1

3

21 Junkyu

21 Dohyun

20 Sunyoung

예제 출력 1

20 Sunyoung

21 Junkyu

21 Dohyun

 

## (나이, 이름)의 정보를 입력 받은 뒤 나이를 기준으로 정렬

파이썬 기본 정렬 라이브러리 이용

나이가 동일 시 , 먼저 입력된 이름 순서 따르도록 key 속성 설정(key 를 람다 함수로 설정)

 

n = int(input())
array = []
for _ in range(n):
	data = input().split(' ')
	array.append((int(data[0]), data[1]))

array = sorted(array, key=lambda x: x[0])

for i in array:
	print(i[0], i[1])
반응형

'Algorithm Study > Baekjoon' 카테고리의 다른 글

2747.피보나치 수  (0) 2020.01.09
10989.수 정렬하기3  (0) 2020.01.09
11650. 좌표 정렬하기  (0) 2020.01.07
1427. 소트인사이드  (0) 2020.01.05
2750. 수 정렬하기  (0) 2020.01.05
반응형

lambda : 쓰고 버리는 일시적인 함수 / 함수가 생성된 곳에서만 필요

즉, 간단한 기능을 일반적인 함수와 같이 정의해두고 쓰는 것이 아니고, 즉시 사용하고 버릴 수 있다.

 

람다 함수 사용법

>>> def inc(n):

	return lambda x: x + n



>>> f = inc(2)

>>> g = inc(4)

>>> print(f(12))

14

>>> print(g(12))

16

>>> print(inc(2)(12))

14

1. map() : 두개의 인수를 가지는 함수 

r = map(function, iterable ...)

- function : 함수 이름

- iterable : 한번에 하나의 멤버를 반환할 수 있는 객체

- map은 리스트의 요소를 각각 처리하므로 lambda의 반환값도 요소여야 한다

 

>>> a = [1,2,3,4]

>>> b = [17,12,11,10]

>>> list(map(lambda x, y:x+y, a,b))

[18, 14, 14, 14]

 

2. filter() 함수

 r = filter(function, iterable)

 

- filter에 인자로 사용되는 function 은 처리되는 각 요소에 대해 boolean 값을 반환

- true 반환 : 그 요소만 남고

- false : 그 요소 제거

 

>>> sort = [2, 18, 9, 22, 17, 24, 8, 12, 27]

>>> list( filter(lambda x: x % 3 == 0, sort) )

[18, 9, 24, 12, 27]

 

3. reduce() 함수

functools.reduce(function, iterable[, initializer])

- 두 개의 필수 인자 + 하나의 옵션 인자

- function 을 사용해서 itreralble 하나의 값으로 줄인다. 

- initializer 사용 시 첫 번째 인자로 추가된다

 

>>> from functools import reduce

>>> reduce(lambda x,y: x+y, [1,2,3,4,5])

15

반응형

'Language Study > Python' 카테고리의 다른 글

리스트에 map 사용하기  (0) 2020.01.27
프린트문 옵션(문자열 형식)  (0) 2020.01.05
python " _ " (언더바) 쓰임  (5) 2020.01.05
List & Tuple  (0) 2020.01.05
swap  (0) 2020.01.04
반응형

좌표 정렬하기

문제

2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.

 


알고리즘

N = int(input())
dot = []

for _ in range(N):
    x, y = map(int, input().split(" "))
    dot.append((x,y))
    
dot_sort = sorted(dot, key=lambda x : (x[0], x[1]))

for x,y in dot_sort:
    print(x,y)

 

 

반응형

'Algorithm Study > Baekjoon' 카테고리의 다른 글

2747.피보나치 수  (0) 2020.01.09
10989.수 정렬하기3  (0) 2020.01.09
10814.나이순 정렬  (0) 2020.01.09
1427. 소트인사이드  (0) 2020.01.05
2750. 수 정렬하기  (0) 2020.01.05
반응형

EC2  : 사용자가 아마존 머신 이미지로 부팅하여 인스턴스라고 불리는 가상 머신을 원 원하는 소프트웨어를 포함하여 구성하게 해줌

           / 스케일링이 가능한 애플리케이션 배치 장려
 

RDS : 분산 관계형 데이터베이스/ 관계형 DB의 스토리지, 연산 자원들을 스케일링 하는 것은 하나의 API 호출로 수행

            / EC2와 함께 사용하여 DB 설정, 운영, 백업 기능 편하게 사용하는 DB 전용서버

 

S3  


Elastic Beanstalk : EC2 + RDS 등 AWS 리소스들을 조합하여 완성된 어플리케이션 플랫폼 / PaaS
                                     / Docker 컨테이너를 기반으로 애플리케이션을 쉽게 배포하고, 운영하고, 관리하는걸 도와주는 AWS 서비스


테이블(8) : 학과 정보 / 경기 대진표 / 부스 정보 / 장기자랑 참가자 / 장기자랑 투표 정보 
          체육대회, 축제 공유하는 “푸드 트럭 정보 ” / 부스 별 방문 스탬프 “부스 스탬프 정보”
           / 추첨 , 투표 등에 의해 회원 테이블 생성 


테이블 : USER(중복 허용 X , 널 값 중복 가능) / POST / PAYCORDT(결제 / USER 1 : 결제 N) / COMMENT 시퀀스 생성 


아쉬운 점 : MyBatis

                    -> SQL 코드로 완전 분리 (기존 DAO에 모든 SQL 작성 , MAPPER 파일에 SQL 코드 입력하고 DAO에서 필요할때마다

                         가져옴,  코드 간결화 ,  유지보수성 향상)로 할 걸

                    -> JDBC(자바 프로그램이 데이터베이스와 연결되어 데이터를 주고 받게 하는 인터페이스 ) 

 

DAO : DB와 연결하게 하기 위해 데이터 접근하는 객체 /그래서 페이지당 커넥션을 하나만 가져오고 그 커넥션을 가져온 객체가 모든 DB와의 연결을 하는것이 DAO 객체입니다

 

VO(DTO) :직을 갖고 있지 않는 순수한 데이터 객체이며 속성과 그 속성에 접근하기 위한 getter, setter 메소드만 가진 클래스

반응형
반응형

join을 통해 2개 이상의 테이블을 연결하여 원하는 데이터로 정제 

 

  • EQUIJOIN : 두 개의 테이블 간에 칼럼값들이 정확하게 일치하는 경우 사용(PK = FK)
  • NON - EQUIJOIN : 두 개의 테이블 간에 칼럼값들이 서로 정확하게 일치하지 않는 경우 사용
  • OUTER JOIN : 두 개의 테이블 간의 JOIN 걸었을 때, JOIN 조건 만족하지 않는 경우에도 그 테이블을 보고자 하는 경우(+) 연산자 사용하는 조인
  • SELF JOIN : 같은 테이블에 있는 행동을 JOIN 하는데 사용

 

EQUI JOIN  VS  OUTER JOIN

-- Equi Join 으로 부서 번호를 조회하는 예제
SELECT DISTINCT(e.deptno), d.deptno, d.dname
  FROM emp e, dept d
 WHERE e.deptno = d.deptno;
 
DEPTNO     DEPTNO
------ ----------
    10         10
    20         20
    30         30
 
-- Outer Join 으로 부서 번호를 조회하는 예제
SELECT DISTINCT(e.deptno), d.deptno
  FROM emp e, dept d
 WHERE e.deptno(+) = d.deptno;
 
DEPTNO  DEPTNO
 ------- --------
     10       10
     20       20
     30       30
              40
              
-- ename LIKE 조건절에 (+)연산자가 누락된 경우
SELECT DISTINCT(a.deptno), b.deptno
  FROM emp a, dept b
 WHERE a.deptno(+) = b.deptno
   AND a.ename LIKE '%';
 
DEPTNO     DEPTNO
---------- ----------
        10         10
        20         20
        30         30
 
-- ename LIKE 조건절에 (+)연산자를 추가해야 정상적으로 데이터가 조회 된다. 
SELECT DISTINCT(a.deptno), b.deptno
  FROM emp a, dept b
 WHERE a.deptno(+) = b.deptno
   AND a.ename(+) LIKE '%';
 
DEPTNO  DEPTNO
 ------- --------
     10       10
     20       20
     30       30
              40

 

LEFT OUTER JOIN : 오른쪽 테이블에 조인시킬 컬럼의 값이 없는 경우 사용

-- LEFT OUTER JOIN 조인 예제
SELECT DISTINCT(e.deptno), d.deptno
  FROM dept d 
  LEFT OUTER JOIN emp e
  ON d.deptno = e.deptno;

 

RIGHT OUTER JOIN : 왼쪽 테이블에 조인시킬 컬럼의 값이 없는 경우

-- RIGHT OUTER JOIN 조인 예제
SELECT DISTINCT(e.deptno), d.deptno
  FROM emp e 
 RIGHT OUTER JOIN dept d
    ON e.deptno = d.deptno;

 

FULL OUTER JOIN : 양쪽 테이블 모두 OUTER JOIN 걸어야 하는 경우 사용

-- FULL OUTER JOIN 조인 예제
SELECT DISTINCT(e.deptno), d.deptno
  FROM emp e 
  FULL OUTER JOIN dept d
    ON e.deptno = d.deptno;
반응형
반응형

정의 

SELECT 문을 통해 결과값들이 나올 때, 이 결과들을 메모리 공간(커서)에 저장

 

커서 => 쿼리문에 의해 반환되는 결과값들을 저장하는 메모리 공간

Fetch => 커서에서 원하는 결과값을 추출

 

사용하는 이유?

커서는 로우를 기반으로 작업된다 

PL/SQL 의 SQL 문처럼 하나의 결과를 리턴하면 암시적으로 커서에 저장되므로 암시적 커서라 하고

PL/SQL 레코드 와 PL/SQL 테이블을 결합한 것은 명시적 커서라 한다.

 

커서 종류

1. 묵시적 커서(Implicit Cursor)

        : 오라클에서 자동으로 선언해주는 SQL 커서.(사용자는 생성 유무를 알 수 없다.)

        

2. 명시적 커서(Explicit cursor)

        : 사용자가 선언해서 생성한 후에 사용하는 SQL 커서, 주로 여러개의 행을 처리하고자

          할 경우 사용한다.

 

커서 속성

1. %Found : 가져올 레코드가 있는 경우 true를 반환

2. %isOpen : 커서가 오픈 상태일 경우 true를 반환

3. %NotFound : 더이상 참조할 레코드가 없을 때 true를 반환

4. %RowCount : 카운터 역할을 한다. 처음 오픈시 0, 패치발생할 때마다 1씩 증가

 

커서 처리 단계(명시적)

1. 명시적 커서 선언(커서 생성)

        EX) Cursor 커서이름

2. 명시적 커서 오픈

        EX) Open커서이름

3. 커서에서 데이터 추출(데이터 행 가져오기)

        EX) Fetch 커서이름

4. 커서 종료

        EX) Close 커서이름

 

반응형
반응형

Procedural Language extension to SQL => 오라클에서 SQL 확장하여 사용하는 프로그램 언어 (절차적 언어)

 

사용하는 이유 ?

  • 대용량 데이터를 연산해야 할 때, WAS 등의 서버로 전송하여 처리하면 네트워크에 부하가 많이 걸릴 수 있다.
    • => 웹 서버(WEB) : HTML 페이지 등을 네트워크 망에 종속되지 않고, 웹서비스를 할 수 있도록 하는 Application
    • => 웹 애플리케이션 서버(WAS) : 웹 서버 + 웹 컨테이너 => tomcat 
                                        / 인터넷 상에서 HTTP 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어 
                                        / 웹 컨테이너 : JSP + Servlet 실행시킬 수 있는 SW 
  • 로직 수정하기 위해 서버를 셧다운 시키지 않고, 단순히 DB에 프로시저 호출하여 사용
  • 블록 단위로 유연하게 사용할 수 있다.

WAS 기본 기능

  • 프로그램 실행 환경과 DB 접속 기능 제공
  • 여러 개의 트랜잭션 관리
  • 업무 처리하는 BL 수행
  • WEB Service 플랫폼 역할

기본 구조 

  • 블록 : 기본 단위 , 선언부, 실행부 , 예외 처리부 / 종류 : 익명 블록, 함수, 프로시저 
    • 선언부 : DECLARE
    • 실행부 : 실제 로직 처리
    • 예외처리부 : 로직 처리하다가 오류가 발생하면 처리하는 내용 기술 하는 부분으로 생략

PL / SQL sub program : function / procedure

  • 함수(function) : 매개변수 존재 / 반환값 존재
  • 프로시져(procedure) : 매개변수 존재 / 반환값 없음(특정 로직만 처리 후 종료)
반응형

'Database Study > SQL' 카테고리의 다른 글

[Oracle DB]Join 종류  (0) 2020.01.06
[Oracle DB] 커서 (CURSOR)  (0) 2020.01.06
[Oracle DB] 오라클_SQL (쿼리문) 처리 및 실행 순서  (0) 2020.01.06
Select query 튜닝  (0) 2020.01.03
[MySQL]JOIN (조인) 문법  (0) 2019.09.12

+ Recent posts