본문 바로가기

IT To do and To was

22년 12월 7일_프로그래머스 SQL 작살

728x90
반응형

수요일[카페에서 공부해봅니다. 과연..두구두구]

 

1. 이것이

2. 알고리즘

3. SQL

4. 암기고래

 

1>

떡볶이 문제

전형적인 이진 탐색문자,(파라메트릭 서치)

최적화 문제를 결정문제로 바꾸어 해결하는 방법

 

절단기의 높이는 0 부터 가장 긴떡의 높이 중간 값이다.

그 후 중간값을 갖고 필요한 떡의 길이와 비교시킨다.

 

n, m = list(map(int, input().split(' ')))
array = list(map(int, input().split()))

start = 0
end = max(array)

result = 0
while(start <= end):
	total = 0
    mid = (start + end) //2
    for x in array :
    	# 잘랐을 때의 떡의 양 계산
        if x > mid :
        	total += m - mid
    # 떡의 양이 부족한 경우 더 많이 자르기
    if total < m :
    	end = mid - 1
    else:
    	result = mid
        start = mid + 1
print(result)

-- 다이나믹 프로그래밍

효율적인 알고리즘을 작성 (메모리공간을 조금 더 사용하면서 연산속도를 올림)

 

예시 ) 

피보나치 수열

def fibo(x):
	if x == 1 or x == 2:
    	return 1
    return fibo(x-1)+fibo(x-2)
print(fibo(3))
# 한 번 꼐산된 결과를 메모제이션하기 하기위한 리스트 초기화
d = [0] * 100

def fibo(x):
	# 종료조건
    if x == 1 or x == 2:
    	return 1
    # 이미 계산한 적이 있는 문제라면 그대로 바노한
    if d[x] != 0:
    	return d[x]
    # 아직 계산하지 않는 문제라면 점화식에 따라서 피보나치 결과 반환
    d[x] = fibo(x-1)+fibo(x-2)
    
print(fibo(99))

2>

외계행성의 나이

def solution(age):
    answer = []
    age = list(str(age))
    for i in age:
        i = int(i)
        answer.append(chr(i + 97))

    return "".join(answer)

 다른사람이 한 풀이

def solution(age):
    answer = ''
    char_num = {str(i): chr(ord('a') + i) for i in range(26)}
    return ''.join([char_num[x] for x in str(age)])

 

인덱스 바꾸기

def solution(my_string, num1, num2):
    answer = ''
    my_string = list(my_string)
    my_string[num1], my_string[num2] = my_string[num2], my_string[num1]
    return "".join(my_string)

 

문자열 정렬하기(2)

def solution(my_string):
    answer = []
    result = []
    my_string = list(my_string)
    for i in my_string:
        result.append(ord(i.lower()))
    result.sort()
    for i in result:
        answer.append(chr(i))
    return "".join(answer)

다른사람이 한 풀이

def solution(my_string):
    return ''.join(sorted(my_string.lower()))

 서울에서 김서방 찾기

def solution(seoul):
    answer = ''
    for i,j in enumerate(seoul):
        if j == "Kim":
            return "김서방은 "+str(i)+"에 있다"

다른사람이 한 풀이

def findKim(seoul):
    return "김서방은 {}에 있다".format(seoul.index('Kim'))

.format()과 .index를 활용

3>

상품을 구매한 회원비율 구하기

SELECT YEAR(ONL.SALES_DATE) AS YEAR, 
        MONTH(ONL.SALES_DATE) AS MONTH,
        COUNT(DISTINCT (ONL.USER_ID)) AS PUCHASED_USERS, 
        ROUND((COUNT(DISTINCT (ONL.USER_ID)))
              / 
              (SELECT COUNT(user_id) FROM USER_INFO
               WHERE YEAR(JOINED) = "2021"),1) AS PUCHASED_RATIO
        FROM USER_INFO INF
JOIN ONLINE_SALE ONL
ON INF.USER_ID = ONL.USER_ID
WHERE YEAR(JOINED) = "2021" 
GROUP BY YEAR, MONTH
ORDER BY YEAR, MONTH

가입한 전체회원수를 구하는 법은

SELECT COUNT(USER_ID) FROM USER_INFO

WHERE YEAR(JOINED) ="2021" # 2021에 가입한 사람

 

이다.

 

문제가 대충? 아닌 대충 설명되어있다. 자신이 못하는게 아니라 문제가 이상하다 상심하지 말자

다 풀었다!

// yesterday wished to today list.

. 이것이_✔️

. 알고리즘_✔️

. SQL_✔️

. 암기고래

 

tomorrow wish list

. 이것이

. 알고리즘

. SQL LEFT JOIN, RIGHT JOIN GROUP BY 이론 정리하기

. 암기고래

 

 
728x90
반응형