728x90

전체 글 206

문자열 합치기 CONCAT('A', 'B')

오랜만에 SQL~~ !!! select concat(max(length), 'cm') as MAX_LENGTH from fish_info https://school.programmers.co.kr/learn/courses/30/lessons/298515 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문자열 합치기 CONCAT('A', 'B') : AB CONCAT('A', 2) : A2 = 'A' + CAST(2 AS VARCHAR) : A2 구분자로 문자열 합치기 CONCAT_WS(', ', 'A', 'B') : A, B

𝙎𝙌𝙇 2024.03.27

[Python] 짝지어 제거하기 (deque)

https://school.programmers.co.kr/learn/courses/30/lessons/12973 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(s): s_list = list(s) for j in range(len(s_list)//2) : for i in range(len(s_list)-1) : if s_list[i] == s_list[i+1] : s_list.pop(i) s_list.pop(i) break if len(s_list) == 0 : return 1 return 0 시간초과 에러뜸! 인덱싱 방식은 오래..

Python fibo

재귀함수 사용시 런타임 에러날때, def solution(n): pre = 0 # 이전 피보나치 수를 저장하는 변수 current = 1 # 현재 피보나치 수를 저장하는 변수 # 2부터 n까지 순회 for i in range(2, n+1): # 현재 피보나치 수는 이전 두 피보나치 수의 합 # 이전 피보나치 수는 갱신하기 전의 현재 피보나치 수 current, pre = current + pre, current # n번째 피보나치 수를 1234567로 나눈 나머지를 반환 return current % 1234567

다이나믹 프로그래밍

메모리를 적절히 사용해 수행 시간 효율성을 비약적으로 향상시키는 방법 다이나믹 프로그래밍 = 동적 계획법 동적 할당 : 프로그램이 실행되는 도중에 실해에 필요한 메모리를 할당하는 기법 조건1) 최적 부분 구조 : 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있음 조건2) 중복되는 부분 문제 : 동일한 작은 문제를 반복적으로 해결해야 함 EX. 피보나치 수열 - 점화식 : 인접한 항들 사이의 관계식 - 이런 수열을 배열이나 리스트를 이용해 표현함 # 피보나치 함수를 재귀함수로 구현 def fibo(x) : if x == 1 or x == 2 : return 1 return fibo(x-1) + fibo(x-2) - 지수 시간 복잡도를 가짐! - 비효율적인 문제 - ..

이진 탐색 알고리즘

이진 탐색 : 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 시간 복잡도 : O(log N) # 이진 탐색 소스코드 구현 (재귀 함수) def binary_search(array, target, start, end) : if start > endd : return None # 찾은 경우 중간점 인덱스 반환 if array[mid] == target : return mid # 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인 elif array[mid] > target : return binary_search(array, target, start, mid - 1) # 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인 else : return binary_search..

정렬 알고리즘

선택 정렬 : 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복 시간 복잡도 : O(N^2) array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)) : min_inex = i # 가장 작은 원소의 인덱스 for j in range(i+1, len(array)): if array[min_index] > array[j]: min_index = j array[i], array[min_index] = array[min_index], array[i] #스와프 삽입 정렬 : 처리되지 않은 데이터를 하나씩 골라 적절한 위치에 삽입 시간 복잡도 : O(N^2) (반복문 두번 중첩) array = [7, 5, 9..

DFS & BFS

그래프 탐색 알고리즘 스택 자료구조 - 선입후출 - 입구와 출구가 동일한 형태 - 박스쌓기로 생각하기 - 기본으로 제공되는 리스트로 스택 이용 가능! stack = [] stack.append(5) #삽입 stack.append(2) stack.pop() #삭제 stack.append(1) stack.append(4) stack.pop() print(stack[::-1]) #최상단 원소부터 출력 -> [1, 5] print(stack) #최하단 원소부터 출력 -> [5, 1] 큐 자료구조 - 선입선출 - 입구와 출구가 모두 뚫려 있는 터널과 같은 형태 - 은행 순서같은 거 - from collections import deque 라이브러리 사용! from collections import deque #큐..

그리디 & 구현

[그리디] 예시1) 거스름 돈 가장 큰 화폐 단위부터 돈을 거슬러 주기 : 가지고 있는 동전 중에서 큰 단위가 항상 작은 단위의 배수이므로 작은 단위의 동전들을 종합해 다른 해가 나올 수 없기 때문 : 800원 거슬러 줘야 하는데 화폐 단위가 500, 400, 100이면 X n = 1260 count = 0 #큰 단위의 화폐부터 차례대로 확인하기 array = [500, 100, 50, 10] for coin in array : count += n // coin #해당 화폐로 거슬러 줄 수 있는 동전의 개수 세기 n %= coin print(count) 예시2) 1이 될 때까지 N에 대하여 최대한 많이 나누기 K로 나누어 떨어지지 않으면 1 빼기, 나누어 떨어지면 K로 나누기 * N이 K로 나누어 떨어지..

728x90