분류 전체보기 55

프로그래머스) 보석쇼핑

https://programmers.co.kr/learn/courses/30/lessons/67258?language=python3 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 프로그래머스 문제는 항상 길다. 링크로 대체한다. 처음에는 투포인터가 의미없다고 생각해서 풀다가 계속해서 시간 초과가 떴다. 결국, 답안을 보며 코드는 제외하고 이론만 습득한 후 구현을 했다. 투포인터를 이용해서 보석의 종류가 부족할 때는 end를 늘리고 보석의 종류가 다 모였다면 조건에 맞지 않을 때 까지 start를 늘려준다. from collections import defa..

Algorithm 2022.05.31

백준) 랜선 자르기

문제의 제한사항을 보면 logN으로 풀어야 할 것 같다. 이 경우는 이진 트리, 이분 탐색, 힙 세가지 경우가 자동으로 떠오른다. 이분 탐색 문제는 양식이 존재하는 느낌이다. dfs처럼 외워야 하는 부분이 있다. bisect를 사용하지 않은 로직으로 비슷하게 푼 문제가 많다. 이분 탐색을 사용하기 위해 배열을 정렬하고 return에 해당하는 부분을 target으로 잡은 뒤 이분탐색을 하면 된다. import sys info = list(map(int,sys.stdin.readline()[:-1].split())) inputs = [int(sys.stdin.readline()[:-1]) for _ in range(info[0])] inputs.sort() lo = 1 hi = inputs[-1] while..

Algorithm 2022.05.30

DB Index

데이터베이스 인덱스란 데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 '자료구조'입니다. 특정 컬럼에 인덱스를 사용할 수 있으며 별도의 메모리 공간에 데이터의 주소를 저장합니다. 인덱스가 생성되면 Where문 조건 등 으로 해당 컬럼을 넣었을 때 검색 속도가 상승하게 됩니다. 인덱스의 단점 인덱스는 기본적으로 정렬되어 있는 상태를 유지 시켜줘야 합니다. 이 것은 검색속도를 빠르게 해주지만 INSERT, UPDATE, DELETE를 통해서 데이터가 추가되거나 값이 바뀔 때 마다 인덱스 테이블을 재정렬 해줘야 합니다. 속도 또한 무작정 빠르기만 한 것은 아닙니다. 전체데이터의 10~15% 이상을 처리할때는 인덱스를 사용하지 않는 것이 더 빠릅니다. 공간또한 기존의 10%정도를 더 차지합니다. 이러한 ..

CS 2022.05.27

LeetCode) Largest Number

주어진 배열에 있는 숫자를 문자열로 붙여서 가장 큰 수를 만들어야 하는 문제다. 정렬방식 중 비교구문만 바꿔주면 된다. merge sort코드를 구글링해와서 비교구문만 바꿔주었다. 3 과 30 을 비교하는 방법: 330, 303 비교 class Solution(): def largestNumber(self, nums: List[int]) -> str: def merge_sort(arr): if len(arr) < 2: return arr mid = len(arr) // 2 low_arr = merge_sort(arr[:mid]) high_arr = merge_sort(arr[mid:]) merged_arr = [] l = h = 0 while l < len(low_arr) and h < len(high_..

Algorithm 2022.05.26

프로그래머스) 파일명 정렬

문제 : https://programmers.co.kr/learn/courses/30/lessons/17686?language=python3 코딩테스트 연습 - [3차] 파일명 정렬 파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램 programmers.co.kr 문제가 너무 길어 링크로.. header와 number부분을 확실하게 나누기만 하면 정렬을 해서 쉽게 풀 수 있는 문제다. def solution(files): answer = [] for i in range(len(files)): n_idx_s = -1 n_idx_e = -1 for j in range(len(..

Algorithm 2022.05.23

python) 정렬에 lambda함수 활용하기

알고리즘 정렬 문제는 정렬 자체를 구현해야 하는 경우가 있는데 파이썬 정렬 함수에 lambda를 활용해서 구현 없이 쉽게 정렬하는 법에 대해 다뤄 보려고 한다. 두 번째 원소를 기준으로 정렬하는 법 두 번째 원소를 기준으로 정렬 후 같은 값에 대해서만 첫 번째 원소를 기준으로 정렬하는 법 이 내용을 응용한 로직 https://ojy9612.tistory.com/34 python) 정렬에 lambda함수 활용하기 알고리즘 정렬 문제는 정렬 자체를 구현해야 하는 경우가 있는데 파이썬 정렬 함수에 lambda를 활용해서 구현 없이 쉽게 정렬하는 법에 대해 다뤄 보려고 한다. 두 번째 원소를 기준으로 정렬하는 ojy9612.tistory.com

Algorithm 2022.05.23

REST API

REST API란, Representational State Transfer(REST), REST아키텍처의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스 Http통신에 CRUD(Create, Read, Updated, Delete)요청을 Resource와 Method로 표현해 특정한 형태로 전달하는 방식이다. 구성 1. Resource 2. Method 3. 표현(JSON, XML) 특징 1. 일관된 인터페이스 - 특정 언어나 기술에 종속X 2. 무상태성 - 서버가 클라이언트의 상태를 저장하지 않음(요청에 대해 처리만 해주면 됨) 3. 캐시 처리 가능 - Http 웹 표준을 사용하기 때문에 Http에서 사용하는 캐시 기능을 사용할 수 있음 4. 서버, 클라이언트 구조 - 각각의 역할이 명확하게 ..

CS 2022.05.22

프로그래머스) 괄호 변환

문제 : https://programmers.co.kr/learn/courses/30/lessons/60058?language=python3 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr 문제가 너무 길어서 핵심만 적어 놓고 링크로 대체 한다. 이 문제는 무려 코딩 양식이 있다. 하지만 문제를 굉장히 이해하기 어려워서 풀기 쉽지 않다. 핵심 부분은 크게 2가지다. u에 올바른 문자열이 왔을 때와 균형 잡힌 문자열이 왔을 때 두 가지만 생각하면 된다. u = "( )", v = ") ) ( ( ( )" u가 올..

Algorithm 2022.05.22

python) deepcopy와 [:](슬라이싱) 차이

copy 모듈의 deepcopy는 리스트가 아닌 객체를 copy할때 유용한 것으로 알고있다. 하지만 오늘 들은 얘기는 조금 충격적이였다. 바로 2차원 배열에는 슬라이싱을 사용시 값이 제대로 복사가 되지 않는다는 점..! a = [ [1,2], [3,4] ] b = a[:] 배열 a는 위와 같이 슬라이싱을 하면 가장 밖에 있는 배열만 복사하고 안 쪽에 있는 배열들은 복사가 되지 않는다. 그 이유는 어렵지 않게 추측할 수 있다. 배열안에 배열을 넣기위해 주소값을 두 번 참조했기 때문이다. 그러므로 슬라이싱을 이용해 제대로 copy하려면 다음과 같이 사용해야한다. b = [ ] for i in range(len(a)): b.append(i[:]) 매우 귀찮은 과정이므로 그냥 deepcopy를 사용하도록 하자.

Algorithm 2022.05.21

LeetCode) subsets

Output과 같이 문자열을 출력하면 되는 문제다. 아주 간단한 집합의 모든 경우의 수를 출력하면 되는 문제이고 LeetCode의 특성상 Output의 원소들은 순서에 상관없이 그냥 return하면 된다. 백준이나 프로그래머스보다 친절한 사이트.. 영어만 아니면 이 곳에서만 알고리즘 연습을 했을 것 같다. dfs에 대한 강의와 문제를 접했던 후 라서 매우 쉽게 풀었다. dfs양식?을 잘 지킨 문제여서 관련 로직을 연습하는데에 큰 도움이 된다. class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: answer = [] def dfs(idx, path): answer.append(path) for i in range(idx, len(n..

Algorithm 2022.05.21