전체 글 364

[Python_DynamicProgramming] 백준 11727번 : 2xn 타일링 2

1. 문제 https://www.acmicpc.net/problem/11727 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net 2. 풀이과정 n의 경우의 수 = (n-1에서 1x2블럭을 추가했을 때) + (n-2에서 2x1블럭 2개 혹은 2x2블럭 1개를 추가했을 때) 정리하면, f(n) = f(n-1) + f(n-2) * 2로 수식을 나타낼 수 있다. n = int(input()) x, y = 1, 3 for i in range(n-2): temp = y y = y + x*2 x = temp if n == 1: print(x) else: ..

[Python_DFS&BFS] 백준 16236번 : 아기 상어

1. 문제 https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 2. 풀이 과정 n = int(input()) graph = [[*map(int, input().split())] for _ in range(n)] shark = 2 dxy = [(-1, 0), (0, -1), (0, 1), (1, 0)]#위왼오아 #먹을 물고기 찾기 def find(n1, n2): q = [] q.append((n1, n2, 0)) visited = [[0 fo..

[IT지식] 블록체인

1. 개념 1. 블록체인이란? - 블록들이 체인처럼 연결된 형태의 데이터베이스 - P2P(Peer to Peer)네트워크를 통해서 관리되는 분산 DB의 한 형태 *P2P : 서버나 클라이언트를 나누지 않고 개인 컴퓨터 사이를 연결하는 통신망 2. 한 블록의 구성 1) block hash 2) previous block hash 3) data 3. hash : input => output, 1) 결정론적 : 특정 input에 대한 output이 고정적이다. 2) 일방향 함수 : output => input을 얻을 수 없다. => hash로 블록의 체인을 만듦 : 나의 hash = 이전 hash + data를 hash처리한 값 2. 활용 방안 - 암호화폐 : 은행을 거치지 않고 결제를 진행할 수 있다. - ..

CS/기타 2021.12.01

[Python_DFS&BFS] 백준 2206번 : 벽 부수고 이동하기

1. 문제 https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 2. 풀이 과정 일반 DFS 문제와 다른점은 벽을 부수고 이미 지나간 경우보다 벽을 안 부수고 돌아서 다시 지나갈 때가 더 길지만 이 값도 저장해두어야 한다. 나중에 나온 벽을 부수고 갔을 때가 최단 경로가 될 수 있기 때문이다. 아래는 추가적으로 테스트 케이스를 만든 것이다. 입력 : 6 5 00000 11110 00000 01111 01011 00000 출력..

[실습] Stored Procedure (저장 프로시저)

1. Stored Procedure란? - 쿼리문의 집합으로 어떤 동작을 일괄 처리하기 위한 용도로 사용 - 함수와 유사한 역할 - 모듈화시켜서 호출만 해서 실행 가능 2. 실습 1. procedure 생성 및 호출 use academicDB; drop procedure IF EXISTS studentProc; DELIMITER $$ create procedure studentProc() BEGIN select * from student; END $$ DELIMITER ; call studentProc();/*호출*/ +) 참고 : procedure의 더 많은 사용법으로 궁금하지 않으면, 바로 다음 단계로 가도 된다. 1) 입력 매개변수 2개인 경우 drop procedure IF EXISTS stude..

[Python_Greedy] 백준 1339번 : 단어 수학

1. 문제 https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 2. 풀이 과정 1. 주어진 문자열이 "AFCA"이라면 A = 1000+1, F = 100, C = 10으로 자릿수만큼 수를 더해준다. 다음 문자열을 읽을 때는 이 값에 누적으로 더해주면 된다. 2. 누적으로 더한 수들을 정렬해서, 제일 큰 수를 가진 알파벳부터 9 => 8 => 7 ... 순으로 할당하는 것이 제일 큰 수를 만들 수 있다. 따라서 출력값은 (해당 알파벳이 가진 수..

[Python_DynamicProgramming] 백준 1912번 : 연속합

1. 문제 https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 2. 풀이 과정 현재 위치에서 선택할 수 있는 방안은 2가지다. 1) 이전 값에 연속해서 더하기 2) reset하고 현재값부터 다시 시작하기 따라서, 현재값과 연속해서 더한 값 중에 큰 수를 선택해나간다. n = int(input()) arr = list(map(int, input().split())) for i in range(1, len(arr)): arr[i] = max(arr[i], arr..

[실습] 고급 SQL SELECT문

0. 사용할 DB 구조 1. 고급 SQL SELECT문 설명 1. 서브쿼리(Sub Query) - 쿼리문 안에 쿼리문이 또 있는 것 /*학생 테이블에서 학과가 컴퓨터인 학생들만 검색하라*/ use academicdb; /*서브쿼리 사용 X*/ select * from student where sdept = "컴퓨터"; /*서브쿼리 사용 O*/ select * from student where sdept = (select sdept from student where sname = "김철수"); 하위 쿼리 (select dept from student where sname = "김철수")는 "컴퓨터"를 반환하므로 동일한 결과가 나온다. 여기서 하위 쿼리에서 둘 이상의 값을 반환할 경우에는 '='이 아닌 IN..

[실습] 키 생성

1. 기본키 생성 - table 정의할 때, 기본키로 지정할 애트리뷰트의 뒤에 'PRIMARY KEY'를 붙여준다. 2. 외래키 생성 FOREIGN KEY REFERENCES 테이블이름(애트리뷰트이름) - "테이블이름"의 "애트리뷰트이름"을 외래키로 쓰겠다. 3. 제약조건 1. PRIMARY KEY (기본키) - 중복 불가 - NULL값 입력 불가 2. UNIQUE - 중복불가 - NULL 허용 3. AUTO_INCREMENT를 지정한 열은 반드시 Primary나 Unique로 지정해줘야 한다. 예시 코드 use test; drop table if exists buy; CREATE TABLE buy ( num SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY, userID ..

[실습] 인덱스 생성과 삭제

1. Primary Key 지정 - table이름 = user - primary key로 지정할 속성 = userID alter table user add constraint pk_name primary key(userID); select * from user; show index from user; - userID를 기준으로 정렬된 것을 볼 수 있다. - 1개만 생성 가능 (보조인덱스, 클러스터링 인덱스) - 보조 인덱스보다 검색 속도는 빠르지만, 데이터 입력/수정/삭제는 더 느리다 2. 단순 보조 인덱스 생성 - 단순 보조 인덱스로 지정할 속성 이름 = addr - 인덱스 이름 = idx_user_addr create index idx_user_addr on user(addr); - 단순(중복 허용,..