반응형

자료구조 및 알고리즘 104

프로그래머스 - 평균 일일 대여 요금 구하기 (SQL)

💬 내가 작성한 SQL 코드 SELECT ROUND(AVG(DAILY_FEE)) AS AVERAGE_FEE FROM CAR_RENTAL_COMPANY_CAR WHERE CAR_TYPE = "SUV" 사실 너무 쉬워서 언급할 것은 없지만, 반올림하는 함수로 ROUND()가 있다. ROUND(숫자, 자리수)로 반올림을 수행한다. 평균값은 AVG()를 통해 구하면 된다. Python만 하다가 SQL하니까 직관적이고 재밌다 ...

프로그래머스 - 조건에 맞는 도서 리스트 출력하기 (SQL)

💬 내가 처음 작성한 SQL 코드(실패) → PUBLISHED_DATE가 잘못 출력됨 SELECT BOOK_ID, PUBLISHED_DATE FROM BOOK WHERE DATE_FORMAT(PUBLISHED_DATE,'%Y') = '2021' AND CATEGORY = '인문' ORDER BY PUBLISHED_DATE ASC; 💬 내가 작성한 SQL 코드(성공) SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') FROM BOOK WHERE DATE_FORMAT(PUBLISHED_DATE,'%Y') = '2021' AND CATEGORY = '인문' ORDER BY PUBLISHED_DATE ASC; DATE_FORMAT 출력에 따라 결과물이 달라진다...

프로그래머스 - 이진 변환 반복하기 (파이썬)

💬 내가 작성한 python 코드 def solution(s): answer = [] cnt=0; zero_cnt = 0 while int(s,2) > 1: # 문자열은 int(문자열, n진수)로 변환하여 연산할 수 있다 cnt += 1 zero_cnt += s.count('0') # 누적된 zero 갯수 세기 위함 one_cnt = s.count('1') s.replace('0', '') binary_str = ""; # one_cnt를 2진법으로 바꿔서 s 업데이트 while one_cnt != 0: binary_str = str(one_cnt % 2) + binary_str one_cnt = one_cnt // 2 s = binary_str answer = [cnt, zero_cnt] return ..

프로그래머스 - 둘만의 암호 (파이썬)

💬 내가 작성한 python 코드 (잘못된 코드 = 78.9/100) → 테스트 케이스가 많이 맞지 않음 def solution(s, skip, index): answer = '' for i in s: # str에서 한글자씩 i가 됨 new_list = []; cnt = 0; alpha = 1 while len(new_list) < index: if ord('z') < ord(i)+alpha: # z 넘어가면 다시 a로 돌아오기 if chr(ord(i)-26+alpha) in skip: # skip 제외하기 cnt += 1 alpha += 1 else: new_list.append(chr(ord(i)-26+alpha)) alpha += 1 else: if chr(ord(i)+alpha) in skip: ..

프로그래머스 - 두 개 뽑아서 더하기 (파이썬)

💬 내가 작성한 python 코드 def solution(numbers): # 서로 다른 인덱스에 있는 두 수 뽑아서 배열 만들기 # 오름차순으로 정렬 answer = [] for i in range(len(numbers)-1): for j in range(i+1, len(numbers)): answer.append(numbers[i] + numbers[j]) answer = set(answer) # 중복이 없게 만들기 answer = sorted(answer) # set 정렬 return answer 💬 다른 사람이 작성한 코드 def solution(numbers): answer = [] for i in range(len(numbers)): for j in range(i+1, len(numbers))..

정렬 - 6) 퀵 정렬 (quick sort)

📍 퀵 정렬: 분할정복방법론N 개의 값이 있고, 특정 값(pivot) 이상/미만으로 분류pivot을 중심으로 왼쪽에는 더 작은 숫자들, 오른쪽에는 더 큰 숫자들이 오도록 만들어준다.시간복잡도: 평균적으로 O(NlogN) / 최악의 경우 O(N^2)병합 정렬은 정확히 logN회 분할이 되지만, 퀵 정렬은 평균적으로 logN회 분할 수행퀵 정렬의 성능은 pivot을 무엇으로 잡느냐에 따라 결정됨pivot은 맨 왼쪽, 맨 오른쪽, 가운데 값 중 중앙값을 선택  💬 python 코드 n 개의 원소가 주어졌을 때, 퀵 정렬을 이용해 n 개의 숫자를 오름차순으로 정렬n = int(input())arr = list(map(int, input().split()))# arr = [17, 21, 15, 29, 81, ..

정렬 - 5) 병합 정렬 (merge sort)

📍 병합 정렬: 반으로 나눠서 정렬하는, 더 빠른 정렬1) 배열의 길이가 1개가 될 때까지 재귀적으로 쪼개기 → O(logN)2) 쪼갠 배열을 합쳐가며 정렬된 배열로 만들기 → O(N)분할 정복 (Divide and Conquer)시간복잡도: O(NlogN)   💬 python 코드 n 개의 원소가 주어졌을 때, 병합 정렬을 이용해 n 개의 숫자를 오름차순으로 정렬 n = int(input())arr = list(map(int, input().split()))merged_arr = [0] * ndef merge(low, mid, high): i = low; j = mid + 1 k = low while i

정렬 - 4) 기수 정렬 (radix sort)

📍 기수 정렬: 값을 비교하지 않는 특이한 정렬맨 뒤에 있는 자릿수부터 정렬, 점점 앞으로 이동하며 각 자릿수를 정렬시간복잡도: O(kn)k는 자릿수 각각의 데이터에 대해 매 자릿수마다 분류작업을 하기 때문에, 분류작업이 k번 반복됨  💬 python 코드function radix_sort(arr, k) for pos = k - 1 ... pos >= 0: set arr_new = [10][] for i = 0 ... i

728x90
반응형