전체 글 708

세그먼트트리

수열이 있을 때 중에서 연속된 특정구간을 주고, 특정구간의 1. 최댓값([백준]2357 최솟값과 최댓값) 2. 최솟값([백준]10868 최솟값) 3. 합([백준]2042 구간합, [백준]1275 커피숍2) 4. 곱([백준]11505 구간곱 구하기) 을 여러번 구하는 문제는 세그먼트트리를 쓰면 된다. 세그먼트 트리를 사용하기 위해선 보통 아래와 같은 3가지 함수가 필요하다. 1. 주어진 수열을 이용하여 처음으로 세그먼트 트리를 만드는 함수 2. 세그먼트트리의 노드하나를 수정하는 함수 3. 세그먼트트리를 이용하여 구간합(or 구간곱 or 최댓값,최솟값)을 구하는 함수. 각 함수코드는 다음과 같다. 1. 세그먼트트리 초기화 함수. def init(node,start,end): if start==end: tre..

알고리즘/graph 2020.07.26

[백준]팰린드롬 분할 #팰린드롬

1. 풀이 (1) dp[i][j] = i에서 j까지의 문자가 팰린드롬이 가능하면 1, 그렇지 않으면 0. (2) count[i] = i번째 문자까지의 분할의 개수의 최솟값 여기서 count[i]를 구하는법이 이문제의 핵심이다. i를 구하는 법은 다음과 같다. --------------------------------------------------------------------------- count[i] = j가 1부터 i까지 도는데 이때 i) j부터 i까지가 팰린드롬이면 => count[j-1]+1 ii) j부터 i까지 팰린드롬이 아니면 => count[j-1]+i-j+1 -----------------------------------------------------------------------..

알고리즘/dp 2020.07.17

오버로딩과 오버라이딩

1. 오버로딩 : 이름은 같고, 매개변수의 타입과 개수만 다른 함수가 여러개 있을 때, 입력값의 형식이 맞는 함수를 적절히 찾아서 사용하는기술 * 파이썬에선 오버로딩이 불가능 하다! 같은 이름의 함수가 여러개 있으면, 가장 밑에 있는 함수가 실행됨 (덮어써지기 때문에) 2. 오버라이딩 : 부모클래스와 상속된 자식 클래스의 매소드이름이 같을 때 자식 클래스의 함수를 사용하는 것 (함수를 재정의하는 기술) # 상속 class FourCal: def __init__(self, first, second): self.first = first self.second = second def setdata(self, first, second): self.first = first self.second = second de..

[백준]2004 조합0의 개수 #팩토리얼#나누기

1. 풀이 nCm의 뒤에 0의 개수는 10이 곱해준 수와 같다. 따라서 nCm=n!/(m! * (n-m)!) 에서 10이 몇번곱해졌는지를 확인한다. (1) 10이 몇번곱해졌는지 알기위해선 소인수분해를 이용해 2와 5가 몇번곱해졌는지를 확인한다. (2) n!에서 num가 몇번곱해졌는지는 다음의 방법으로 알 수가 있다. ex) 150! 에서 5가 몇번곱해졌는가? 5^1이 곱해진 횟수를 구한다 => 150//5=30 5^2이 곱해진 횟수를 구한다 => 150//25=6 5^3이 곱해진 횟수를 구한다 => 150//125=1 총 횟수 => 36 이를 소스코드로 나타내면 다음과 같다 def cntNum(a,num): ans=0 multiNum=num while(multiNum

알고리즘/수학 2020.07.16

[백준]3109 빵집 #그리디#dfs

1. 풀이 (1) 0열(빵집)에서 가장 윗 행부터 차례대로 출발하여 (오른쪽위,오른쪽,오른쪽아래) 순서대로 파이프를 놓는다. (2) 끝열(원웅이집) 까지 놓을 수 있으면 최종답 +1후 종료, 놓을자리가 없으면 그자리에서 종료 (3) 이때 방문했던 곳은 다시 방문할 수 없으므로 표시해준다. (끝열(원웅이집)까지 못가더라도 윗행에서 못가면 아래에서도 못가기 때문에 visited로 표시해준다) * 파이프를 최대한으로 설치하기 위해선 무조건 (우상,우,우하) 순으로 진행되고, 윗행에서 부터 아래행으로 내려오면서 탐색하면 반드시 최적해가 나오는 그리디 문제이다. 또한 파이프를 최대로 만들기 위해선 엇갈리는 경우도 배제해야 한다. ( 커플만들기 문제와 비슷 https://sosoeasy.tistory.com/40)..

알고리즘/수학 2020.07.15

[SQL] DDL (create drop alter)

CREATE 1. 테이블 생성 creat table (테이블이름) ( (컬럼이름) (타입)(글자수) (옵션) ); create table dept( deptno varchar2(4) primary key, deptname varchar2(20); ); create table emp ( empno number(10), ename varchar2(20), sal number(10,2) default 0, --소수점 2째자리, 기본값은 0 constraint emppk primary key(empno), --empno를 기본키로 constraint deptfk foreign key (deptno) --deptno를 외래키로 references dept(deptno), on delete cascade --dep..

DB/SQL 2020.07.11

[SQL] 내장함수

1. 문자형 함수 함수 설명 acsii(문자) 문자,숫자를 acsii 코드값으로 char(acsii 코드값) acsii 코드값을 문자로 substr(문자열,m,n) 문자열 m부터 n개 자르기 concat(문자열1,문자열2) 문자열1||문자열2 문자열 합치기 lower(문자열) 소문자로 upper(문자열) 대문자로 length(문자열) or len(문자열) 문자열 길이 ltrim(문자열,지정문자) 왼쪽에 (반복되는)지정문자 삭제, or 왼쪽 공백삭제 rtrim(문자열,지정문자) 오른쪽에 (반복되는)지정문자 삭제, or 오른쪽 공백삭제 trim 양쪽에 반복되는 지정문자 삭제 or 양쪽공백삭제 2. 날짜형 함수 함수 설명 sysdate 오늘의 날짜를 날짜 타입으로 extact('year' or 'month' ..

DB/SQL 2020.07.11

[SQL] JOIN(조인)

* 열은(칼럼은) SELECT에서 구한다. 여기서 말하는 모든 JOIN은 행을 말한다! 1. 등가(EQUI) 조인 ​ (1) 등가 조인(INNER JOIN) --EMP와 DEPT 테이블을 DEPTNO칼럼으로 SELECT * FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO; --EMP와 DEPT 테이블을 INNER JOING, 같은게 여러개있다면 여러 조합으로 JOIN SELECT * FROM EMP INNER JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO; - inner join할때 select* 하면, on에 쓰인 조건 열 2개가 모두 출력된다. - 겹치는것이 여러개 있다면 각 조합별로 모두 출력한다. 예를들어 emp.dptno에 1이 2개, dept..

DB/SQL 2020.07.11

[SQL] DCL

권한부여 GRANT (권한리스트) ON (테이블) TO (사용자) (WITH GRATN OPTION) GRANT SELECT, INSERT, DELETE ON R TO KIM WITH GRANT OPTION; -- limbest 사용자에게 emp테이블에 대해서 다음과 같은 권한을 부여한다. grant select, insert, update, delete on emp to limbest; with grant option --권한을 부여할 수 있는 권한을 부여 취소 REVOKE (GRANT OPTION FOR) (권한리스트) ON (개체) FROM 사용자 (CASCADE) *GRANT OPTION FOR : 옵션을 붙이면 부여할수있는 권한만 삭제. 안붙이면 권한&부여권한 모두 삭제 REVOKE GRANT ..

DB/SQL 2020.07.11

[SQL]계층형 쿼리(START WITH, CONNECT BY)

SELECT LPAD(' ',2*(LEVEL-1)) || item_name item_names, item_id, parent_id FROM bom START WITH parent_id is null connect by prior item_id = parent_id; 1. LPAD 공백을 만들어주기 위한 함수. 빈칸(' ')을 LEVEL만큼 왼쪽에 넣어줌으로서 들여쓰기시켜줌 2. start with (조건) 루트노드를 지정하는것. 조건을 만족하는 모든 행이 루트 노드가 된다. 3. connect by (조건) prior (자식노드) = (부모노드) 로서 계층을 만들어 주는것

DB/SQL 2020.07.11

[SQL]having조건의 사용

1. having의 이용 (where과 차이) having은 group by와 함께 사용된다. having조건과 where조건의 차이는 아래와 같다 having - where group by 절 뒤에 기술 - from 뒤에 기술 group by 그룹함수를 포함해야함 그룹함수 그룹함수가 포함된 조건은 에러가 발생 에러발생 ( * 단 group by에 기술된 칼럼에 대한 일반조건은 가능하지만 보통 쓰지않음) 일반조건 일반조건가능 2. 문제 이름이 두번이상 쓰인 이름과 그 횟수를 표현 하라 (1) 코드 group by로 묶인 name의 count를 해야하므로 having을 쓴다 SELECT NAME,COUNT(NAME) FROM ANIMAL_INS GROUP BY NAME HAVING COUNT(NAME)>=..

DB/SQL 2020.07.07