[문제]

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 in range(m):
            if park[i][j] == 'S':
                cx, cy = i, j

    for order in routes:
        key, cnt = order.split()
        dx, dy = direction[key]
        x, y = cx, cy
        flag = True
        
        for _ in range(int(cnt)):
            nx, ny = x + dx, y + dy
            if not (0 <= nx < n and 0 <= ny < m and park[nx][ny] != 'X'):
                flag = False
                break
            x, y = nx, ny
        
        if flag:
            cx, cy = x, y
        
    return [cx, cy]

 

 

'코드카타 > Python' 카테고리의 다른 글

82. 멀리 뛰기  (1) 2025.01.05
신고 결과 받기  (0) 2025.01.02
달리기 경주  (1) 2024.12.30
[PCCP 기출문제] 2번 / 석유 시추  (2) 2024.12.28
개인정보 수집 유효기간  (0) 2024.12.24

[문제]

https://leetcode.com/problems/immediate-food-delivery-ii/description/

 

[풀이]

1. 각 고객별로 첫주문을 가져오고, 해당 주문과 희망 배송 날짜가 같은 걸 찾고 더한 뒤 전체 개수로 나눠줌

 

Pandas

import pandas as pd

def 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_delivery_date']).mean() * 100, 2)]})

 

SQL

SELECT ROUND(AVG(order_date=customer_pref_delivery_date)*100, 2) AS immediate_percentage
FROM Delivery
WHERE (customer_id, order_date) in (SELECT 
                                        customer_id
                                        , min(order_date)
                                    FROM Delivery
                                    GROUP BY customer_id
                                    )
SELECT 
    ROUND(SUM(order_date=customer_pref_delivery_date AND first_order=1) / COUNT(DISTINCT customer_id) * 100, 2) AS immediate_percentage 
FROM 
(
SELECT
    *
    , RANK() OVER(PARTITION BY customer_id ORDER BY order_date) AS first_order
FROM Delivery
) a

'코드카타 > Pandas' 카테고리의 다른 글

100. User Activity for the Past 30 Days I  (0) 2025.01.05
Game Play Analysis IV  (0) 2025.01.01
Monthly Transactions I  (0) 2024.12.30
Queries Quality and Percentage  (1) 2024.12.27
Percentage of Users Attended a Contest  (0) 2024.12.26

+ Recent posts