CS

    SQL 성능 확인, Plan(실행계획) 보는 법

    mybatis로 개발을 하면서 query의 성능을 최적화 시키는게 필요한 시점들이 있다. 이때 튜닝을 하게 된느데 튜닝의 기초라고 할 수 있는 플랜 보는 법을 알아보자. 1. plan (실행계획) 이란? DBMS는 SQL을 수행할 최적의 처리 경로를 생성해 주는 핵심 엔진인 옵티마이저(Optimizer)를 가지고 있다. 이 옵티마이저는 우리가 SQL을 작성하고 실행하면 이 쿼리를 어떤 순서로 실행하겠다고 실행계획을 세우게 된다. 이 실행계획이 어떤 순서로 짜여져 있냐에 따라 성능의 차이가 크기 때문에 plan을 보는 방법을 알아두면 쿼리 성능 개선에 큰 도움이 된다. 2. plan 보는 법 툴을 확인하거나 "Explain plan for"를 쿼리 앞단에 붙여서 실행계획을 떠보면 위와 비슷한 형식으로 나온..

    [BaekJoon] 백준 16928번 뱀과 사다리 게임 - Python

    [BaekJoon] 백준 16928번 뱀과 사다리 게임 - Python 🎈문제 https://www.acmicpc.net/problem/16928 16928번: 뱀과 사다리 게임 첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으 www.acmicpc.net 💬설명 간단한 bfs문제 게임판 전체를 기준으로 주사위 1-6칸이 나왔을 경우를 하나씩 큐에 넣어가면서 해결하면 되는 문제 포인트는 사다리나 뱀을 만난 경우 이동하는 칸으로 update를 해줘야 한다는 것이다. 👩‍💻코드 from collections import deque..

    [BaekJoon] 백준 7576번 토마토 - Python

    [BaekJoon] 백준 7576번 토마토 🎈문제 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 💬설명 비슷한 문제를 여러개 풀어봤기 때문에 금방 풀었다. Bfs로 많이 푼 것 같은데, 큐를 쓰지 않고 풀었다. 아래와 같이 푸니까 pypy로 채점하지 않고 제한시간을 만족시킬 수 있었다. 아래와 같이 푼다. 토마토 위치를 먼저 배열에 저장해준다. 익은 토마토 개수와 모든 토마토 개수를 따로 저장해준다. (나중에 일일히 세지 않고..

    [BaekJoon] 백준 7569번 토마토 - Python

    [BaekJoon] 백준 7569번 토마토 - Python 🎈문제 https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 💬설명 처음에 bfs로 큐를 써서 풀려고 하다가 적용하지 않고 풀어봤다. 대신 시간 초과에 걸려서 pypy로 채점했다. 확실하게 시간 단축해서 풀고 싶으면 queue로 풀어줘야 할듯 풀이는 간단하다. 매일 추가된 익은 토마토에 대해 6개 방향을 체크해서 익은 토마토의 개수와 전체 토마토의 개수가 같다면 출력 ..

    [BaekJoon] 백준 1107번 리모컨 - Python

    [BaekJoon] 백준 1107번 리모컨 - Python 🎈문제 https://www.acmicpc.net/problem/1107 💬설명 범위가 작고, 시간은 많이 주어졌기 때문에 완전탐색으로 풀 수 있는 문제 1. +-만 썼을 때 얼마나 걸리는지 구한다. 2. 모든 범위에 대해 고장난 버튼이 없는 수를 찾아서 100에서 몇번 버튼을 눌러야하는지 계산해서 최소값을 업데이트 한다. 나는 고장난 버튼을 찾기 위해 set을 써서 교집합을 통해 비교해줬다. 👩‍💻코드 N = input() M = int(input()) if M != 0: broken = set(map(int, input().split())) else: broken = set() # +-로 가는 횟수 answer = abs(100 - int(N..

    [Programmers] 두 큐 합 같게 만들기 - python

    [Programmers] 두 큐 합 같게 만들기 - 파이썬 🎈문제 https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💬설명 각 배열을 deque에 넣어서 큐로 만든다. 만약 sum 이 홀수 인 경우 어떻게 해도 반반 나눠질 수 없으니 예외 처리해준다. 주의점: sum같은 경우는 while문 안에서 돌리는 것보다 밖에서 sum을 미리 구한 뒤, 내부에서 + - 정도만 해주는게 효율적이다. 이후에 while문 안에서 합이 큰 큐에서 합이 작은 큐로..

    [Programmers] 성격 유형 검사하기 - Python

    [Programmers] 성격 유형 검사하기 - Python 🎈문제 https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 간단한 문자열 문제. 푸는데 10분정도 걸렸다. 👩‍💻코드 def solution(survey, choices): answer = "" tp = {"R": 0, "T": 0, "C": 0, "F": 0, "J": 0, "M": 0, "A": 0, "N": 0} for i in range(len(survey)): if choice..

    [OS] Process Syncronization

    Background 공유된 데이터에 동시에 접근해서 write을 하는 것은 데이터 불일치를 유발할 수 있다. 이렇게 공유된 데이터를 동시에 여러 프로세스가 건드리는 상황을 Race condition이라고 한다. 결과적으로 최종값은 누가 그 데이터를 마지막으로 건드렸냐에 달려있게 된다. 이런 Race condition을 막기 위해 병렬로 실행되는 프로세스들은 동기화(synchronized)되어야 한다. The Critical-Section Problem 그럼 Critical-Section Problem, 임계 구역 문제가 무엇인지부터 살펴보자. n개의 프로세스들이 공유된 데이터를 사용하기 위해 경쟁하고 있다고 가정해보자. 각각의 프로세스들은 공유된 데이터에 접근하는 코드 부분인 critical sectio..