수요일[아 내일 12월이네ㅜㅠ]
1. w3big
2. SQL
3. 이것이
4. 알고리즘
1>
w3big 잘 되어있으나 한글로 번역이 되어있지 않아서 살짝 아쉽다.
2>
와 C 드디어 풀었다
식품분류별 가장 비싼 식품의 정보 조회하기
SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME FROM
(SELECT CATEGORY AS CA, MAX(PRICE) AS MP, PRODUCT_NAME AS PRO FROM FOOD_PRODUCT
GROUP BY CA)A
INNER JOIN (SELECT * FROM FOOD_PRODUCT)B
ON A.MP = B.PRICE AND CATEGORY = B.CATEGORY
WHERE CATEGORY = "과자" OR CATEGORY = "김치" OR CATEGORY = "식용유" OR CATEGORY = "국"
GROUP BY CATEGORY
ORDER BY MAX_PRICE DESC
3>
정렬(선택정렬, 삽입정렬, 퀵정렬, 계수정렬.. 등)
선택 정렬 : 매번 가장 작은 걸 선택하여 맨 앞에 있는 데이터와 바꾸고 그 STEP을 반복한다.
선택정렬 소스 코드
array =[1,3,5,2,3,6,7,5,0]
for i in range(len(array))
min_index = 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] #스와프
삽입정렬 : 두번재 데이터부터 시작하여 사잇값을 뒷 데이터와 비교 후 삽입
삽입정렬 소스 코드
array = [1,4,8,3,5,9,0]
for i in range(1, lend(array)):
for j in range(i, 0, -1):
if array[j] < array[j - 1]:
array[j], array[j - 1] = array[j - 1], array[j]
else : # 자기보다 작은 데이터를 만나면 그 위치에서 멈춤
break
퀵정렬 : 기준데이터를 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 것 pivot을 이용 큰수와 작은 수를 교환할 때의 기준을 피벗
- 호어분할(Hoare Partition)
리스트에서 첫 번째 데이터를 피벗으로 정함
왼쪽부터 피벗보다 큰 데이터를 찾고 오른족은 작은 데이터를 찾는다
그 후 서로 교환하여 중간 값까지 교환 후 중간에 피벗을 넣고 좌 우도 동일한 과정을 거친다.
퀵정렬 소스 코드
array = [1,5,8,9,7,4,3]
def quick_sort(array, start, end):
if start >= end : # 원소가 1개이면 종료
return
pivot = start # pivot은 첫번째 원소
left = start +1
right = end
while left <= right :
# 피벗보다 큰 데이터 찾음
while left <= end and array[left] <= array[pivot]:
left += 1
# 피벗보다 작은 데이터 찾음
while right > start and array[right] >= array[pivot]:
right -= 1
if left > right :
array[right], array[right] = array[right], array[left]
quick_sort(array, start, right-1)
quick_sort(array, right +1, end)
quick_sort(array, 0, len(array)-1)
python 장점을 살린 퀵 정렬 소스코드
array = [5,7,9,0,3,1,6,2]
def quick_sort(array):
# 리스트가 하나 이하의 원소만을 담고 있다면 종료
if len(array) <= 1:
retrun array
pivot = array[0] # 피벗은 첫 번째 원소
tail = array[1:]
left_side = [x for x in tail if x <= pivot] # 분할된 왼쪽
right_side = [ x for x in tail if x > pivot] # 분할된 오른쪽
# 분할 이후 왼족 부분과 오른쪽 부분에서 각각 정렬을 수행하고, 전체 리스트를 반환
return quick_sort(left_side) + [pivot] + quick_sort(right_side)
퀵 정렬의 평균 시간 보잡도는 O(NlogN)
계수정렬 : 특징으로 매우 빠름. 일반적으로 별도의 리스트를 선언하고 그 안에 정렬에 대한 정보를 담는다.
데이터를 1씩 증가시키면서 계수를 정렬시킨다.
각 데이터가 몇번 등장했는지 알 수 있음
그 후 새로 만든 데이터의 값과 노출된 횟수를 차례로 print한다
계수정렬 소스 코드
array = [7,5,9,0,3,1,6,2,9,1,4,8]
count = [0] * (max(array) +1) # 모든 범위를 포함하는 리스트 선언(0으로 초기화)
for i in range(len(array)):
count[array[i]] += 1 # 각 데이터에 해당하는 인덱스의 값 증가
for i in range(len(count)):
for j in range(count[i]):
print(i, end=' ')
어떤사람이 되고싶은가? 평온한사람
정렬 라이브러리
- sorted() 퀵 정렬과 동작 방식이 비슷하고 느리지만 O(NlogN)은 보장
sort()와 sorted()는 key 매개변수를 입력받을 수 있다.key 값으로는 하나의 함수가 들어가야하며 이는 정렬 기준이 된다.
test= [('바나나',2),('사과', 5),('파인애플',3)]
def setting(data):
return data[1]
sorted(test, key=setting)
데이터의 범위가 한정되어있으며, 더 빠르게 동작해야할때는 계수정렬을 사용
위에서 아래로
a = int(input())
c = []
for i in range(a):
b = int(input())
c.append(b)
c.reverse()
for i in range(len(c)):
print(c[i], end=' ')
답안 :
n = int(input())
array = []
for i in range(n):
array.append(int(input())
array = sorted(array, reverse=True)
for i in array:
print(i, end=' ')
이 다음 문제는 이해가 안돼서 내일..
4>
주사위 개수
def solution(box, n):
return (box[0] // n) * (box[1] //n) * (box[2]//n)
다른사람이 한 풀이
def solution(box, n):
w,h,d = box[0]//n,box[1]//n,box[2]//n
return w*d*h
내가 생각한 다른 풀이(런타임 에러떠서 제출 못함)
import math
def solution(box,n):
return math.prod(box[i]//n for i in range(n))
문자열 내 p와 y의 개수
def solution(s):
answer = True
s = s.lower()
a, b = 0, 0
for i in s:
if i == "y":
a += 1
elif i == "p":
b += 1
else:
continue
if a == b :
pass
else:
answer = False
return answer
다른사람이 한 풀이
# 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
# 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
def numPY(s):
# 함수를 완성하세요
return s.lower().count('p') == s.lower().count('y')
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( numPY("pPoooyY") )
print( numPY("Pyy") )
.count 사용
n월 (진척도)
알고리즘 공부 6%
SQL 85%
정보처리기사 0%
토스 1%
// yesterday wished to today list.
. https://www.w3big.com/ko/python/default.html#gsc.tab=0 보기_✔️
. SQL 못푼 거 하나라도 풀기(1/4)_✔️
. 이것이_✔️
. 하나 넣기_✔️
. 월계획 쓰기_✔️
tomorrow wish list
. 병원 잘 다녀오기
. 못푼 SQL 하나라도 풀기
. 11시부터 5시까지 딴짓 하지 않기
. 알고리즘
'IT To do and To was' 카테고리의 다른 글
22년 12월 2일_알고리즘, 토스, 정처기 계획, SQL 하나, 이것이 (0) | 2022.12.02 |
---|---|
22년 12월 1일_와우 20대 중반될 날이 한달밖에 안남았다. (2) | 2022.12.01 |
22년 11월 29일_블로그 관리를 해야겠다..,면접후기(내일..), 프로그래머스 PYTHON, SQL (2) | 2022.11.29 |
22년 11월 28일_한달이나 지났네, SQL, 이것이 (0) | 2022.11.28 |
22년 11월 27일_알고리즘, SQL, DFS/BFS 이해하기, 토스 틀 잡기 (1) | 2022.11.27 |