[코딩테스트]/[Pandas]

[LeetCode - Pandas] (Easy) 1148. Article Views I

잰잰' 2025. 4. 21. 16:03
Table: Views

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| article_id    | int     |
| author_id     | int     |
| viewer_id     | int     |
| view_date     | date    |
+---------------+---------+

이 테이블에는 기본 키(고유 값을 가진 열)가 없습니다. 이 테이블은 중복된 행을 가질 수 있습니다.
각 행은 특정 뷰어가 특정 날짜에 특정 저자가 작성한 기사를 열람했다는 정보를 나타냅니다.
같은 author_id와 viewer_id는 동일한 사람을 나타냅니다.

 

문제

자신의 기사를 한 번이라도 열람한 모든 저자를 찾는 솔루션을 작성하세요.

결과 테이블은 id를 기준으로 오름차순으로 정렬되어야 합니다.

결과 형식은 아래 예시와 같습니다.

Example 1:

Input: 
Views table:
+------------+-----------+-----------+------------+
| article_id | author_id | viewer_id | view_date  |
+------------+-----------+-----------+------------+
| 1          | 3         | 5         | 2019-08-01 |
| 1          | 3         | 6         | 2019-08-02 |
| 2          | 7         | 7         | 2019-08-01 |
| 2          | 7         | 6         | 2019-08-02 |
| 4          | 7         | 1         | 2019-07-22 |
| 3          | 4         | 4         | 2019-07-21 |
| 3          | 4         | 4         | 2019-07-21 |
+------------+-----------+-----------+------------+
Output: 
+------+
| id   |
+------+
| 4    |
| 7    |
+------+

 

 

✏️ 풀이

import pandas as pd

def article_views(views: pd.DataFrame) -> pd.DataFrame:
    df = views[(views['author_id'] == views['viewer_id'])][['author_id']].drop_duplicates().rename(columns={'author_id':'id'})
    
    result = df.sort_values(by='id')

    return result

1. 자신의 기사를 한 번이라도 열람(author_id == viewer_id)한 저자(author_id) 조회

2. 중복 삭제를 위해 drop_duplicates() 사용

3. id로 컬럼명 변경

4. 오름차순 정렬