TIL(24.06.27.)

codataffee·2024년 6월 27일

TIL

목록 보기
80/135
post-thumbnail

#INTRO

빙글빙글 : )

금요일 같은 목요일.


#코드카타 (09:00 ~ 10:00)

  • KATA #74

  • SQL

    • 테이블을 잘 확인하고 이해하면, 복잡하게 풀어야 하는 문제도
      나름 쉽게 풀 수 있다는 것을 배웠다.
# 쿼리를 있는 그대로 작성했을 경우,
SELECT C.COMPANY_CODE,
       C.FOUNDER,
       COALESCE(LM.TOTAL_LEAD_MANAGERS, 0) TOTAL_LEAD_MANAGERS,
       COALESCE(SM.TOTAL_SENIOR_MANAGERS, 0) TOTAL_SENIOR_MANAGERS,
       COALESCE(M.TOTAL_MANAGERS, 0) TOTAL_MANAGERS,
       COALESCE(E.TOTAL_EMPLOYEES, 0) TOTAL_EMPLOYEES
FROM COMPANY C LEFT JOIN 
		(
    	SELECT COMPANY_CODE,
        	   COUNT(DISTINCT LEAD_MANAGER_CODE) AS TOTAL_LEAD_MANAGERS
	    FROM LEAD_MANAGER
  	    GROUP BY COMPANY_CODE	
		) LM ON C.COMPANY_CODE = LM.COMPANY_CODE
		LEFT JOIN 
    	(
    	SELECT COMPANY_CODE,
       	       COUNT(DISTINCT SENIOR_MANAGER_CODE) AS TOTAL_SENIOR_MANAGERS
    	FROM SENIOR_MANAGER
    	GROUP BY COMPANY_CODE
		) SM ON C.COMPANY_CODE = SM.COMPANY_CODE
		LEFT JOIN 
   	 	(
    	SELECT COMPANY_CODE,
     	       COUNT(DISTINCT MANAGER_CODE) AS TOTAL_MANAGERS
    	FROM MANAGER
    	GROUP BY COMPANY_CODE
		) M ON C.COMPANY_CODE = M.COMPANY_CODE
		LEFT JOIN 
    	(
    	SELECT COMPANY_CODE,
               COUNT(DISTINCT EMPLOYEE_CODE) AS TOTAL_EMPLOYEES
    	FROM EMPLOYEE
    	GROUP BY COMPANY_CODE
		) E ON C.COMPANY_CODE = E.COMPANY_CODE
ORDER BY C.COMPANY_CODE
    
# 전체 테이블을 확인하고 필요한 부분에 LEFT JOIN, GROUP BY 활용
SELECT C.COMPANY_CODE, 
       C.FOUNDER, 
       COUNT(DISTINCT LEAD_MANAGER_CODE), 
       COUNT(DISTINCT SENIOR_MANAGER_CODE), 
       COUNT(DISTINCT MANAGER_CODE), 
       COUNT(DISTINCT EMPLOYEE_CODE) 
FROM EMPLOYEE E LEFT JOIN COMPANY C 
     ON E.COMPANY_CODE=C.COMPANY_CODE 
GROUP BY COMPANY_CODE, FOUNDER 
ORDER BY COMPANY_CODE

  • PYTHON
    • deque() 활용하기
from collections import deque

def solution(bridge_length, weight, truck_weights):
    # 대기 트럭 큐 생성
    waiting_trucks = deque(truck_weights)
    # 다리 위 트럭 큐 초기화
    bridge = deque()
    # 경과 시간 초기화
    time = 0
    # 현재 다리 위 트럭들의 총 무게 초기화
    current_bridge_weight = 0
    
    # 대기 트럭이나 다리 위 트럭이 있는 동안 반복
    while waiting_trucks or bridge:
        time += 1  # 반복 1회마다 1초씩 시간 증가
        
        # 다리를 다 건넌 트럭이 있는지 확인
        if bridge and bridge[0][1] == bridge_length:
            truck_weight, truck_position = bridge.popleft()  # 다리에서 트럭 제거
            current_bridge_weight -= truck_weight  # 현재 다리 무게에서 제거된 트럭 무게 빼기
        
        # 새로운 트럭이 다리에 올라갈 수 있는지 확인
        if waiting_trucks and current_bridge_weight + waiting_trucks[0] <= weight:
            truck_weight = waiting_trucks.popleft()  # 대기 트럭에서 트럭 하나 제거
            bridge.append((truck_weight, 0))  # 다리에 트럭 추가 (무게, 위치 초기화)
            current_bridge_weight += truck_weight  # 현재 다리 무게에 추가된 트럭 무게 더하기
        
        # 다리 위 모든 트럭의 위치 업데이트
        for i in range(len(bridge)):
            truck_weight, truck_position = bridge[i]
            bridge[i] = (truck_weight, truck_position + 1)  # 트럭 위치 1 증가
    
    return time  # 모든 트럭이 다리를 건넌 시간 반환

#태블로 강의 (10:00 ~ 18:00)

웹으로 하다 안돼서 결국 설치ㅋㅋ


#이력서 작성 (18:00 ~ 22:00)


#OUTRO

오늘의 한 줄.

하나씩 차분하게 !

profile
커피 좋아하는 데이터 꿈나무

0개의 댓글