목록코드카타 (158)
susinlee 님의 블로그
[문제]https://leetcode.com/problems/product-sales-analysis-iii/description/ [풀이]1. product_id 별로 연도가 가장 작은 행을 집계하고2. 기존 테이블과 product_id와 year를 키로 병합3. 병합한 테이블에서 제출 형식에 맞게 열을 선택하고 이름을 바꿔준다 Pandasimport pandas as pddef sales_analysis(sales: pd.DataFrame, product: pd.DataFrame) -> pd.DataFrame: t1 = sales.groupby('product_id')['year'].min().reset_index(name='year') merged = t1.merge(sales, on=[..
[문제]https://school.programmers.co.kr/learn/courses/30/lessons/12914 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr [풀이]1. 문제의 답에는 피보나치 수열의 규칙이 있음2. 피보나치 수열을 구현하면 되는데, 재귀함수로 구현할 때는 그 과정에서 메모이제이션을 통해 시간복잡도 최적화3. 구현할 때 n-2를 먼저 할 것 재귀함수로 구현def solution(n): memo = {1:1, 2:2} return pibo(n, memo) % 1234567def pibo(n, memo): if n in memo: return..
[문제]https://leetcode.com/problems/user-activity-for-the-past-30-days-i/description/ [풀이]1. 특정 기간 사이의 행들만 필터링 (between 메소드 사용)2. 날짜별로 그룹화해서 고유 유저 수를 센다 (nunique 메소드 사용)3. 컬럼명 변경 (rename 메소드 사용) Pandasimport pandas as pddef user_activity(activity: pd.DataFrame) -> pd.DataFrame: return activity[activity['activity_date'].between('2019-06-28', '2019-07-27')].groupby('activity_date')['user_id'].nun..
https://school.programmers.co.kr/learn/courses/30/lessons/92334 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr [풀이]1. 중복된 신고는 누적되지않으므로 중복되지 않은 신고를 하나씩 가져와서2. 신고당한 사람을 1씩 카운트 해주고, 신고자의 신고목록에 추가한다(왜?) → k번 기준을 필터링하기 위해서 신고당한 개수를 세어야 하고, 신고자가 신고한 사람이 정지되었을 때 해당 정보를 받아야 하기 때문에 신고목록을 작성해야 함3. 정지당할 사람의 목록을 작성한다.(왜?) → 그래야 신고자의 신고목록에서 정지당한 유저의 수를 셀 수 있으니까4. 개수를 인덱스 ..
[문제]https://leetcode.com/problems/game-play-analysis-iv/description/ [풀이]1. player_id 별로 첫 로그인 날짜를 구하고2. player_id 별로 로그인 날짜가 첫 로그인 날짜보다 하루 뒤인 행의 개수를 구한다3. 전체 player_id 고유값으로 나눈다. Pandasdef gameplay_analysis(activity: pd.DataFrame) -> pd.DataFrame: activity['first'] = activity.groupby('player_id').event_date.transform(min) activity_second = activity[activity['first'] + pd.DateOffset(1) ==..
[문제]https://school.programmers.co.kr/learn/courses/30/lessons/172928 [풀이]1. 방향 딕셔너리를 생성해줌2. 시작 지점 좌표를 구해주고3. 명령을 하나씩 꺼내서 방향과 거리로 분리하고 탐색하는 과정 반복4. 탐색할 때 명령을 수행할 수 있는지 여부를 뜻하는 flag 변수 설정5. 수행할 수 있다면 최종적으로 이동할 위치인 좌표로 수정def solution(park, routes): direction = {'N':(-1, 0), 'E':(0, 1), 'S':(1, 0), 'W':(0, -1)} n, m = len(park), len(park[0]) cx, cy = 0, 0 for i in range(n): for j ..
[문제]https://leetcode.com/problems/immediate-food-delivery-ii/description/ [풀이]1. 각 고객별로 첫주문을 가져오고, 해당 주문과 희망 배송 날짜가 같은 걸 찾고 더한 뒤 전체 개수로 나눠줌 Pandasimport pandas as pddef immediate_food_delivery(delivery: pd.DataFrame) -> pd.DataFrame: delivery = delivery.groupby('customer_id').min() return pd.DataFrame({'immediate_percentage' : [round((delivery['order_date'] == delivery['customer_pref_deliv..
[문제]https://school.programmers.co.kr/learn/courses/30/lessons/178871 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr [풀이]1. 효율성을 고려해야 하는 문제이므로 리스트에 인덱스로 접근하여 값을 변경해주어야 한다.2. 딕셔너리를 통해 인덱스를 저장하고, 저장된 값을 수정해주면서 리스트에 인덱스로 접근해 순위를 바꿔준다. from collections import defaultdictdef solution(players, callings): rank = defaultdict(int) for i, player in enumerate(playe..