전체 글

전체 글

    2563 전깃줄

    문제 https://www.acmicpc.net/problem/2565 2565번: 전깃줄 첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는 www.acmicpc.net 접근 전깃줄이 교차하지 않으려면 첫 번째 전봇대의 원소 x, y에 대해 x < y인 경우 연결된 두 번째 전봇대의 원소 f(x), f(y)가 f(x) < f(y)를 만족해야 한다. (f는 문제에서 주어진 연결 정보) 따라서 한 전봇대를 기준으로 정렬한 뒤, 다른 전봇대에서 만들 수 있는 가장 긴 오름차순 수열의 길이를 구하면 되므로 LIS를 이용하기로 했다. 풀이 n = int(input()) a ..

    15728 에리 - 카드

    문제 https://www.acmicpc.net/problem/15728 15728번: 에리 - 카드 첫째 줄에 N, K(0 ≤ K < N ≤ 100)가 주어지고 둘째 줄에는 N개의 ‘공유 숫자카드’에 적혀 있는 정수, 셋째 줄에는 N개의 ‘팀 숫자카드’에 적혀 있는 정수가 주어진다. 이 수는 -10,000보다 크거나 www.acmicpc.net 접근 문제에 주어진 n의 범위가 크지 않으므로, 얻을 수 있는 점수들을 전부 계산해서 k개를 제외한 뒤 남아있는 카드로 만들 수 있는 값 중 최대값을 출력했다. 풀이 계산한 모든 점수를 가지고 있는 배열을 정렬해서 큰 순서대로 k개를 제하는데, 이미 전에 제거된 카드인지 확인하기 위해 Counter를 이용했다. 또한 k개를 제한 후, 배열에 남아있는 가장 큰 값..

    테이블 JOIN 튜닝

    MySQL과 MariaDB에서 테이블의 데이터를 결합하는 조인 알고리즘은 대부분 중첩 루프 조인을 사용한다. 성능 최적화를 위해 다른 조인 알고리즘을 제공하지만, 대부분의 조인 방식이 중첩 루프 조인에 기반을 두므로 튜닝 분석 시 실행 계획을 확인해야 한다. 작은 테이블이 먼저 조인에 참여하는 SQL 문 현황 분석 부서사원_매핑 테이블과 부서 테이블을 조인하여 부서 시작일자가 '2002-03-01' 이후인 사원의 데이터를 조회하는 쿼리 드라이빙 테이블인 부서 테이블과 드리븐 테이블인 부서사원_매핑 테이블은 중첩 루프 조인을 수행한다. 작은 크기의 부서 테이블에서 부서.부서번호 컬럼만 SELECT 절과 WHERE 절에 필요하므로, 부서명 인덱스를 활용해 인덱스를 풀 스캔한다. 상대적으로 큰 크기의 부서사원..

    SQL 문 튜닝

    테이블 테이블명 설명 사원 해당 기업에 소속된 직원들의 정보를 저장하는 테이블 부서 조직에서 관리하는 업무 부서에 관한 정보를 저장하는 테이블 부서사원_매핑 부서 테이블과 사원 테이블 간의 매핑 정보를 저장하는 테이블로, 한 명의 사원은 특정 부서에 소속되므로 그에 해당하는 연결 정보를 저장한다. 부서관리자 부서를 대표하는 관리자 사원의 정보가 저장되는 테이블 직급 사원이 위치하는 포지션을 나타내는 테이블로, 과거의 직급 정보부터 현재의 직급 정보까지 적재되어 있다. 급여 사원별로 매년 계약한 연봉 정보가 저장되는 테이블로, 과거 급여부터 현재 급여까지 매번 적재되어 있다. 사원출입기록 지역별, 출입문별로 출입한 이려게 관한 시간 정보를 적재하는 테이블 인덱스 목록 테이블명 키 유형 키 구성열 급여 PK..

    16933 벽 부수고 이동하기 3

    문제 https://www.acmicpc.net/problem/16933 16933번: 벽 부수고 이동하기 3 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자. www.acmicpc.net 풀이 from collections import deque import sys input = sys.stdin.readline dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] n, m, k = map(int, input().split()) board = [input().rstrip() for _ in range(n)] check = [[..

    SQL 프로파일링

    프로파일링은 SQL 문에서 문제가 되는 병목 지점을 찾기위해 사용하는 툴을 말한다. 느린 쿼리나 문제가 있다고 의심되는 SQL 문의 원인을 확인할 수 있다. SQL 프로파일링 MySQL은 프로파일링이 기본적으로 비활성화 되어 있으므로, 활성화 작업을 진행한다. 프로파일링을 수행할 SQL 문을 출력하고, 로파일링된 쿼리 목록을 확인한다. 특정 쿼리 ID에 대해서만 프로파일링된 상태 내용을 확인하려면, 다음과 같이 쿼리 ID를 입력한다. 특정 Status에 해당되는 Duration 값이 높게 나타난다면 문제가 될 소지가 높은 구간으로 볼 수 있다. 추가 정보 프로파일링의 추가 정보를 확인하려면 아래와 같은 키워드를 이용하여 구체적으로 분석할 수 있다. show profile 구문 뒤에 해당 키워드를 작성하여..

    MySQL과 MariaDB 실행 계획

    실행 계획 실행 계획이란 SQL 문으로 요청한 데이터를 어떻게 불러올 것인지에 관한 계획, 즉 경로를 의미한다. 실행 계획을 확인하는 키워드로는 EXPLAIN, DESCRIBE, DESC가 있으며, 3가지 중 어떤 키워드를 사용해도 실행 계획의 결과는 같다. EXPLAIN SQL 문; DESCRIBE SQL 문; DESC SQL 문; MySQL SQL 문 앞에 EXPLAIN 키워드를 입력하고 실행하면 옵티마이저가 만든 실행 계획이 출력된다. MariaDB에 비해 partitions, filtered 열이 추가되면서 더 많은 정보를 보여준다. MariaDB 실행 계획 항목 분석 1. id SQL 문이 수행되는 차례를 ID로 표기한 것으로, 조인할 때는 똑같은 ID가 표시된다. ID의 숫자가 작을수록 먼저 ..

    JOIN의 종류

    JOIN 조인이란 두 개 이상의 테이블을 서로 연결하여 하나의 결과를 만드는 것을 말합니다. 즉, 필요한 데이터가 여러 테이블에 흩어져 존재하는 경우에 조인을 이용해 데이터들을 결합할 수 있습니다. 조인은 분리된 데이터 간의 공통된 정보, 즉 동일한 칼럼 또는 키 기준으로 데이터를 논리적으로 연결합니다. Inner Join 두 테이블에 공통된 데이터가 존재하는 행에 대해서만 조인을 수행하는 방법으로, 교집합에 해당합니다. [명시적 방법] JOIN 키워드에 조인 대상 테이블을 작성하고 ON 절에는 조인할 비교조건 작성 SELECT 학생.학번, 학생.이름, 지도교수.교수명 FROM 학생 JOIN 지도교수 ON 학생.학번 = 지도교수.학번 [암시적 방법] SELECT 학생.학번, 학생.이름, 지도교수.교수명 ..

    `서브쿼리와 뷰

    서브쿼리 서브쿼리란 쿼리 안의 보조 쿼리를 가리키는 용어로, 가장 바깥쪽의 SELECT 문인 메인쿼리를 기준으로 내부에 SELECT 문을 추가로 작성한다. 서브쿼리는 SELECT 문 안쪽에 위치한 SELECT 문이 어느 위치에 작성되었는지에 따라 아래와 같이 구분할 수 있다. 위치 이름 SELECT 절 스칼라 서브쿼리 FROM 절 인라인 뷰 WHERE 절 중첩 서브쿼리 스칼라 서브쿼리 메인쿼리의 SELECT 절에 있는 또 다른 SELECT 절 스칼라 서브쿼리의 결과값은 1행 1열의 구조로 출력되어야 하며, 만약 스칼라 서브쿼리의 결과값이 2개 이상 나오면 에러가 발생한다. 보통 스칼라 서브쿼리는 출력되는 데이터 건수가 1건이어야 하므로 집계함수(max, min, avg, sum, count 등)와 같이 ..