목록코드카타 (157)
susinlee 님의 블로그
[문제]https://leetcode.com/problems/triangle-judgement/description/ [풀이]1. 가장 큰 변의 길이와 전체 변의 길이를 다 더한다음 2로 나눈 값을 비교한다.2. 그때 가장 큰 변의 길이가 더 작다면 'No' 를 아니라면 'Yes'를 나타내는 열을 생성해준다. 가장 큰 변의 길이보다 나머지 두 변의 길이의 합이 더 크면 된다. 가장 큰 변의 길이는 구할 수 있겠는데 나머지 두 변을 어떻게 가져오지라는 고민... 그러다가 다 더한다음에 2로 나눠버리면 그 숫자는 결국 (나머지 변의 길이 합) 과 (가장 큰 변의 길이)로 나뉘어질 수 있겠구나 생각이 나서 구현. 즉, 다 더해서 2로 나눈 값이 가장 큰 변의 길이보다 크면 삼각형 그리기 가능. Pandasim..
[문제]https://school.programmers.co.kr/learn/courses/30/lessons/131127 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr [풀이]1. 먼저, 원하는 제품과 해당 제품의 수량을 {상품: 갯수} 형태의 딕셔너리(d1)로 생성한다.2. 그런 다음, 할인 제품 목록에서 첫 10개의 제품을 위와 동일한 형태의딕셔너리(d2)로 구현한 뒤, 두 딕셔너리(d1, d2)를 비교한다. 두 딕셔너리가 같으면 answer 값을 1 증가시킨다.3. 이후, discount를 순회하면서 슬라이딩 윈도우 기법을 사용해 딕셔너리를 업데이트 한다.- 왼쪽 끝의 제품은 1 감소시키고, 새..
[문제]https://leetcode.com/problems/the-number-of-employees-which-report-to-each-employee/description/ [풀이]1. 매니저 아이디(reports_to) 별로 그룹화 한 후 agg 함수를 통해 열이름과 집계함수를 동시에 적용해준다.2. reports_to 는 count 함수를, age는 mean 함수를 적용하고, 예전에 살펴봤듯이 판다스는 반올림 규칙(0.5일 때는 짝수로 처리)이 따로 있기 때문에 작은 수를 더해줘서 이부분을 커버해준다. 열이름은 각각 reports_count, average_age 로 설정한다.3. rename 함수를 통해 reports_to를 employee_id로 변경하여 병합을 쉽게 만들고, 출력할 컬럼만..
[문제]https://school.programmers.co.kr/learn/courses/30/lessons/12949 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr [풀이]1. a x b 행렬과 c x d 행렬을 곱하면 a x d 행렬이 된다. 이때 b = c 이어야 곱셈이 가능하다.2. arr1의 행의 길이(n)와 arr2의 열의 길이(m)를 구한다.3. n x m 행렬 answer를 만들어준다. 3행 3열인 두 행렬의 곱셈 프로세스를 써보면 다음과 같다. i=0, j=0 → (arr1[0][0] x arr2[0][0]) + (arr1[0][1] x arr2[1]..
[문제]https://leetcode.com/problems/primary-department-for-each-employee/description/ [풀이]1. 집계함수를 그룹별로 적용할 때 전체 행을 유지하면서 집계해주는 transform 함수를 사용2. primary_flag가 'Y' 이거나 소속부서가 하나인 행들만 필터링3. employee_id와 department_id 컬럼만 반환 Pandasimport pandas as pddef find_primary_department(employee: pd.DataFrame) -> pd.DataFrame: employee['department_cnt'] = employee.groupby('employee_id')['department_id'].tr..
문제 1 : 첫 주문 고객 연도별 매출 조회“2011년 12월”에 첫 주문을 한 고객들의 연도별 매출을 조회하는 SQL 문을 작성하세요. 고객 이름은 이름과 성을 결합하여 생성합니다. 결과는 고객 ID(customerid)기준 오름차순, 연도(year) 기준 오름차순으로 정렬합니다.' [풀이]1. 11년 12월에 첫 주문한 고객을 필터링해야 하므로 sales_order 테이블에서 고객별로 그룹화 한 뒤 MIN 함수를 통해 첫 주문을 계산하고, 계산한 값이 11년 12월인 고객만 필터링한다.SELECT cutomeridFROM sales_orderGROUP BY customeridHAVING MIN(orderdate) LIKE '2011-12%' 2. 위 쿼리를 서브쿼리로 WHERE 절로 보내, 11년 1..
[문제]https://school.programmers.co.kr/learn/courses/30/lessons/87390 [풀이] 정확성문제] https://school.programmers.co.kr/learn/courses/30/lessons/87390 [풀이] 정확성1. 1부터 n 까지 i 를 뽑아 행을 하나씩 만들어가는데 i 행의 경우 i 로 i 번까지 채우고 그 다음부터 1씩 늘려서 채워야함2. while 문과 for 문으로 이를 구현하고 만들어진 배열에 left와 right로 인덱싱해서 반환한다3. 시간복잡도 n^2 으로 오답처리된다.def solution(n, left, right): answer = [] for i in range(1, n+1): k = i ..
[문제]https://leetcode.com/problems/customers-who-bought-all-products/description/ [풀이]1. customer 테이블에서 customer_id 별로 그룹화한 뒤 product_key를 세어준다.2. 같은 상품을 여러 번 구매했을 수 있으므로 중복을 제거해준다.3. product 테이블의 개수와 같은 customer_id 만 필터링한다. Pandasimport pandas as pddef find_customers(customer: pd.DataFrame, product: pd.DataFrame) -> pd.DataFrame: df = customer.drop_duplicates().groupby('customer_id').count()...