76.  상품을 구매한 회원 비율 구하기 

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/131534

정답 코드:

SELECT
    YEAR(os.SALES_DATE) AS YEAR,
    MONTH(os.SALES_DATE) AS MONTH,
    COUNT(DISTINCT os.USER_ID) AS PURCHASED_USERS,
    # 2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수
    ROUND(
        COUNT(DISTINCT os.USER_ID) /
        (
        SELECT COUNT(*)
        FROM USER_INFO
        WHERE JOINED >= '2021-01-01'
        AND JOINED < '2022-01-01')
        , 1) AS PURCHASED_RATIO
FROM USER_INFO ui
JOIN ONLINE_SALE os
    ON os.USER_ID = ui.USER_ID
WHERE ui.JOINED BETWEEN '2021-01-01' AND '2021-12-31'
GROUP BY YEAR(os.SALES_DATE), MONTH(os.SALES_DATE)
ORDER BY YEAR ASC, MONTH ASC;

 

문제 풀이때 했던 생각.

# 어느 의류 쇼핑몰에 가입한 회원 정보를 담은 USER_INFO
# 테이블과 온라인 상품 판매 정보를 담은 ONLINE_SALE

# 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율
# (=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)
# 년, 월 별로 출력
# 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림
# 전체 결과는 년을 기준으로 오름차순 정렬
#  년이 같다면 월을 기준으로 오름차순 정렬

 


 

'E.코드카타 > Level 5' 카테고리의 다른 글

코드카타 Level.5 74, 75  (0) 2026.02.05
코드카타 Level.5 71~73  (1) 2026.01.22
코드카타 Level.5 68~70  (0) 2026.01.19

코드카타 Level.5 74, 75

 

코드카타 Level.5 74, 75

74: 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/157339정답 코드:SELECT cc.CAR_ID, cc.CAR_TYPE, FLOOR(cc.DAILY_FEE * 30 * (100 - dp.DISCOUNT_RATE) /

papago9211.tistory.com

 


https://github.com/leegolem/codekata/blob/main/programmers/lv2/2026_02_-5_%EC%BD%94%EB%93%9C%ED%83%80%EC%B9%B4_4%EB%AC%B8%EC%A0%9C.ipynb

 

codekata/programmers/lv2/2026_02_-5_코드타카_4문제.ipynb at main · leegolem/codekata

코드카타를 올리는 저장소. Contribute to leegolem/codekata development by creating an account on GitHub.

github.com

 

파이썬 37~40번


https://github.com/leegolem/data_preprocessing/tree/main/study_notes/data-preprocessing

 

data_preprocessing/study_notes/data-preprocessing at main · leegolem/data_preprocessing

Contribute to leegolem/data_preprocessing development by creating an account on GitHub.

github.com

데이터 전처리 복습

Part 4. 결측치(Missing Value) 처리의 논리.ipynb

Part 5. 값 정제(Cleaning)의 대표 패턴.ipynb


https://github.com/leegolem/data_preprocessing/blob/main/live-session/2026_02_05/2_practice_01.ipynb

 

data_preprocessing/live-session/2026_02_05/2_practice_01.ipynb at main · leegolem/data_preprocessing

Contribute to leegolem/data_preprocessing development by creating an account on GitHub.

github.com

통계: 기술통계 실습


 

통계 수업: 확률과 분포는 내일 내용 다시한번 더 정리

74: 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/157339

정답 코드:

SELECT
    cc.CAR_ID,
    cc.CAR_TYPE,
    FLOOR(cc.DAILY_FEE * 30 * (100 - dp.DISCOUNT_RATE) / 100) AS FEE
FROM CAR_RENTAL_COMPANY_CAR cc
JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN dp
    ON dp.CAR_TYPE = cc.CAR_TYPE
    AND dp.DURATION_TYPE = '30일 이상'
LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY rh
    ON rh.CAR_ID = cc.CAR_ID
    # 2022년 11월 1일부터 2022년 11월 30일까지 대여된 자동차
    AND rh.START_DATE < '2022-12-01'
    AND rh.END_DATE   >= '2022-11-01'
WHERE cc.CAR_TYPE in ('세단', "SUV") 
    AND rh.HISTORY_ID IS NULL       # 대여기록이 없는 자동차
    AND (cc.DAILY_FEE * 30 * (100 - dp.DISCOUNT_RATE) / 100) >= 500000
    AND (cc.DAILY_FEE * 30 * (100 - dp.DISCOUNT_RATE) / 100) < 2000000
ORDER BY FEE DESC, cc.CAR_TYPE ASC, cc.CAR_ID DESC;

문제 풀이때 했던 생각.

# 차랑정보 CAR_RENTAL_COMPANY_CAR cc
# 자동차 대여 기록 정보 CAR_RENTAL_COMPANY_RENTAL_HISTORY  rh
# 대여기간별 할인 정책 CAR_RENTAL_COMPANY_DISCOUNT_PLAN  dp

# 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중
# 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능
# 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차
# 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력
# 결과는 대여 금액을 기준으로 내림차순 정렬
# 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬
# 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬

 


 

75: 자동차 대여 기록 별 대여 금액 구하기

문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/151141

정답 코드:

SELECT
    rh.HISTORY_ID,
    FLOOR(
        cc.DAILY_FEE
        * (DATEDIFF(rh.END_DATE, rh.START_DATE) + 1)  # 날짜 차이
        * (100 - IFNULL(dp.DISCOUNT_RATE, 0)) / 100
    ) AS FEE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY rh
JOIN CAR_RENTAL_COMPANY_CAR cc
    ON cc.CAR_ID = rh.CAR_ID
LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN dp
    ON dp.CAR_TYPE = cc.CAR_TYPE
    AND dp.DURATION_TYPE =
        CASE
            WHEN (DATEDIFF(rh.END_DATE, rh.START_DATE) + 1) >= 90 THEN '90일 이상'
            WHEN (DATEDIFF(rh.END_DATE, rh.START_DATE) + 1) >= 30 THEN '30일 이상'
            WHEN (DATEDIFF(rh.END_DATE, rh.START_DATE) + 1) >= 7  THEN '7일 이상'
            ELSE NULL
        END
WHERE cc.CAR_TYPE = '트럭'
ORDER BY FEE DESC, HISTORY_ID DESC

 

문제 풀이때 했던 생각.

# 차랑정보 CAR_RENTAL_COMPANY_CAR cc
# 자동차 대여 기록 정보 CAR_RENTAL_COMPANY_RENTAL_HISTORY  rh
# 대여기간별 할인 정책 CAR_RENTAL_COMPANY_DISCOUNT_PLAN  dp

# 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해
# 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력
# 대여 금액을 기준으로 내림차순 정렬, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬

 


 

'E.코드카타 > Level 5' 카테고리의 다른 글

코드카타 Level.5 76  (0) 2026.02.06
코드카타 Level.5 71~73  (1) 2026.01.22
코드카타 Level.5 68~70  (0) 2026.01.19

https://github.com/leegolem/data_preprocessing/blob/main/live-session/2026_02_04/1_today_training.ipynb

 

data_preprocessing/live-session/2026_02_04/1_today_training.ipynb at main · leegolem/data_preprocessing

Contribute to leegolem/data_preprocessing development by creating an account on GitHub.

github.com


https://github.com/leegolem/data_preprocessing/tree/main/study_notes/data-preprocessing

 

data_preprocessing/study_notes/data-preprocessing at main · leegolem/data_preprocessing

Contribute to leegolem/data_preprocessing development by creating an account on GitHub.

github.com

 

=========================================

Part 0. 데이터 전처리는 무엇인가 .ipynb
Part 1. Pandas 데이터 구조 이해.ipynb
Part 2. Pandas 데이터 구조 이해.ipynb
Part 3. dtype(자료형) 전처리의 핵심 엔진.ipynb

=========================================


 

https://papago9211.tistory.com/156

 

양질의 데이터를 판별하는 5가지 방법 4: 데이터형식을 파악했는가?

출처https://yozm.wishket.com/magazine/detail/1107/ 양질의 데이터를 판별하는 5가지 방법 : 4 데이터 형식을 파악했는가? | 요즘IT데이터 구조와 생김새에서 모든 데이터는 차이를 보입니다. 그리고 데이터

papago9211.tistory.com

https://papago9211.tistory.com/157

 

양질의 데이터를 판별하는 5가지 방법 5: 목적에 적합한 데이터인가?

출처https://yozm.wishket.com/magazine/detail/1123/ 양질의 데이터를 판별하는 5가지 방법 : 5 목적에 적합한 데이터인가? | 요즘IT사실 좋은 데이터라고 매번 쓰이는 것은 아니며 좋지 않은 데이터라고 절대

papago9211.tistory.com

 

https://github.com/leegolem/Data_Preprocessing/tree/main/study_notes

 

Data_Preprocessing/study_notes at main · leegolem/Data_Preprocessing

Contribute to leegolem/Data_Preprocessing development by creating an account on GitHub.

github.com

 

출처

https://yozm.wishket.com/magazine/detail/1123/

 

양질의 데이터를 판별하는 5가지 방법 : 5 목적에 적합한 데이터인가? | 요즘IT

사실 좋은 데이터라고 매번 쓰이는 것은 아니며 좋지 않은 데이터라고 절대 사용되지 않는 것은 아닙니다. 양질의 데이터라는 것은 상황에 따라, 분석 목적에 따라 변화하기 마련입니다. 결국

yozm.wishket.com

 

요약

이 아티클은 

데이터가 양질의 데이터인지 판단하려면 분석 목적에 적합한 데이터인지 확인해야 한다는 내용을 설명한다.

좋은 데이터인지 단순히 양, 신뢰도, 구조만 보는 것이 아니라 현실적인 분석 목적에 맞는 정보가 담겨 있는지가 중요하다고 말한다.

 

주요포인트

1. 양질의 데이터란?

어떤 데이터가 좋은지 절대적인 기준은 없다.

데이터가 분석하려는 목적에 맞게 정보가 있는지가 가장 중요하다. 

 

2. 데이터에 원하는 정보가 있는가 확인하기

DIKW 피라미드 이론을 통해 데이터 → 정보 → 지식 → 지혜로 갈수록 실제로 사용할 수 있는 데이터가 된다.

단순히 많이 수집된 데이터라 하더라도 원하는 정보가 없으면 분석에 쓸모가 없다. 

 

3. 같은 데이터라도 사람에 따라 다르게 평가될 수 있다

데이터의 가치 판단은 사람에 따라 달라질 수 있다

숙련된 분석가는 작은 패턴도 찾아낼 수 있지만, 덜 숙련된 분석가는 놓칠 수 있다

 

4. 분석 방법에 적합한 데이터인가

분석 방법이 무엇인지에 따라 필요한 데이터가 달라진다.



5. 인사이트 도출용 데이터

단순 데이터만 있는 것보다 지수처럼 가공된 데이터가 인사이트를 찾는 데 유리하다.

 

6. 결론

분석 목적이 명확하지 않으면 “좋은 데이터”라 평가할 수 없다.

 

핵심개념&용어정리

양질의 데이터: 분석 목적에 부합하는, 실제 필요한 정보가 들어 있는 데이터

DIKW 피라미드: Data → Information → Knowledge → Wisdom의 계층 구조

종속 변수: 머신러닝에서 예측하려는 대상 데이터

 

인사이트

좋은 데이터란 분석 목적에 맞는 데이터란 점과 단순히 많은 데이터가 있다고 해서 좋은 데이터가 되지는 않는점을 배울수 있었다. 특히 가장 중요한것은 분석 목적을 먼저 정해야 데이터의 질을 판단할 수 있다는 점이였다

출처

https://yozm.wishket.com/magazine/detail/1107/

 

양질의 데이터를 판별하는 5가지 방법 : 4 데이터 형식을 파악했는가? | 요즘IT

데이터 구조와 생김새에서 모든 데이터는 차이를 보입니다. 그리고 데이터의 생김새, 즉 데이터 형식에 따라서 분석 가치가 높은 양질의 데이터와 그렇지 못한 저품질의 데이터가 나뉘기도 합

yozm.wishket.com

 

요약

이 아티클은 양질의 데이터인지 확인하는 방법 중 하나로 데이터 형식이 중요하다는 내용을 설명하고 있다.

정형 데이터(표 형태)와 비정형 데이터(이미지, 텍스트 등)를 비교하면서, 데이터의 구조나 형식에 따라 분석 가치가 달라질 수 있다는 점을 강조한다.

 

주요포인트

1. 데이터의 형태가 분석에서 중요하다.

- 데이터는 정형 vs 비정형 데이터로 나눌 수 있다.

- 정형 데이터는 행과 열로 정해진 구조가 있다.

- 비정형 데이터는 구조가 없어 바로 분석하기 어렵다

 

2. 정형 데이터 안에서도 데이터의 척도가 중요하다.

- 정형데이터는 범주형, 수치형 데이터로 구분된다.

- 수치형 데이터는 평균·표준편차 같은 계산이 가능하다

- 범주형 데이터는 연산이 제한적이다.

 

3. 범주형 데이터의 비율을 보면 분성 가능성을 알 수 있다.

- 범주형 데이터가 너무 많으면 분석에 제한이 걸린다.

- 절대 기준이 아닌 참고용으로 활용하는것이 좋다.

 

4. 분석 목적에 따라 양질의 데이터 기준은 달라진다.

- 통계, 머신러닝 분석에는 수치형 정형 데이터가 유리

- AI, 텍스트/이미지 분석에는 비정형 데이터도 훌륭한 데이터가 된다.

 

핵심개념&용어정리

정형데이터: 

행과 열처럼 정해진 구조를 갖는 테이블 형태의 데이터. 표 형태로 보면 이해하기 쉽다.

 

비정형 데이터:

이미지, 영상, 텍스트처럼 구조가 없는 데이터. 통계 분석에 바로 쓰기 어렵다.

 

수치형 데이터:

숫자 그 자체로 의미 있는 값. 평균·합계 같은 연산이 가능하다.

 

범주형 데이터:

분류나 그룹처럼 의미만 있는 데이터. 숫자로 보여도 연산이 제한된다.

 

인사이트

제대로 된 분석과 의도한 분석을 수행하기 위해서는 데이터 자체가 잘 정리되어 있어야 한다는 점을 배울 수 있었다.

기초 프로젝트: 분석 방법론

 

기초 프로젝트: 분석 방법론

Google이 말하는 데이터 분석의 6단계기존 전통적인 데이터 분석(클리닝, 변환, 시각화, 모델링)과 달리, Google은 의사결정 중심으로 데이터 분석을 정의한다.아래 6단계를 제대로 수행하면 더 나은

papago9211.tistory.com

APPASA: 기초 정리

 

APPASA: 기초 정리

참조https://papago9211.tistory.com/145 기초 프로젝트: 분석 방법론Google이 말하는 데이터 분석의 6단계기존 전통적인 데이터 분석(클리닝, 변환, 시각화, 모델링)과 달리, Google은 의사결정 중심으로 데이

papago9211.tistory.com

~~~

APPASA: Share. 공유하기

 

APPASA: Share. 공유하기

5. Share. 공유하기분석 결과를 이해관계자가 이해할 수 있도록 전달하는 단계분석 결과가 아무리 유용해도 이해관계자에게 전달되지 않으면 의미가 없다. 차트, 그래프 등의 시각화를 활용해 결

papago9211.tistory.com

 

https://github.com/leegolem/Data_Preprocessing/blob/main/study_notes/Part%200..ipynb

 

Data_Preprocessing/study_notes/Part 0..ipynb at main · leegolem/Data_Preprocessing

Contribute to leegolem/Data_Preprocessing development by creating an account on GitHub.

github.com

 

https://github.com/leegolem/Data_Preprocessing/blob/main/study_notes/Part%201.ipynb

 

Data_Preprocessing/study_notes/Part 1.ipynb at main · leegolem/Data_Preprocessing

Contribute to leegolem/Data_Preprocessing development by creating an account on GitHub.

github.com

 

 

6. Act. 행동하기 (다음에)

분석 결과를 실제 의사결정과 행동으로 연결하는 단계

분석을 통해 얻은 통찰을 바탕으로 비즈니스 문제를 해결하고 실제 의사결정에 반영한다.
단순히 결과를 공유하는 데서 끝나는 것이 아니라, 분석 결과를 실행으로 옮기는 것이 이 단계의 핵심이다.


Plan Action. 실행 계획 수립하기 (다음에)

분석 결과를 바탕으로 구체적인 실행 전략을 수립한다. 누가, 언제, 어떤 방식으로 실행할지를 명확히 정의한다.

 

왜 하나?

실행 계획이 없으면 분석 결과는 보고서에만 머무르고, 실제 변화를 만들지 못한다.

 

하면 무엇이 좋나?

분석이 실제 행동으로 이어지고, 성과를 만들어낼 수 있다.

 

예시

신규 고객 확보를 위해 다음 달부터 SNS 채널 광고 예산을 20% 증액하기로 결정하였다.


Execute Strategy. 전략 실행하기 (다음에)

수립한 실행 계획을 실제 업무와 현장에 적용한다. 마케팅 캠페인 집행, 가격 정책 변경, 서비스 기능 개선 등 구체적인 행동이 포함된다.

 

왜 하나?

아무리 좋은 인사이트라도 실행되지 않으면 가치가 없다.

 

하면 무엇이 좋나?

데이터 기반 전략이 현실에서 검증되고, 개선 효과를 직접 확인할 수 있다.

 

예시

"분석 결과를 바탕으로 신규 회원을 대상으로 첫 구매 할인 쿠폰을 발행하였다."


Measure Impact. 성과 측정하기 (다음에)

실행한 전략이 목표 달성에 얼마나 기여했는지를 평가한다. KPI, 매출, 전환율 등 사전에 정의한 지표를 기준으로 성과를 측정한다.

 

왜 하나?

성과를 측정하지 않으면 어떤 전략이 효과적이었는지, 어떤 전략이 실패했는지 알 수 없다.

 

하면 무엇이 좋나?

실행 결과를 객관적으로 판단할 수 있고, 이후 전략 개선의 근거로 활용할 수 있다.

 

예시

"쿠폰 발행 이후 신규 회원 가입률이 15% 증가하였고, 재구매율 또한 개선되었다."


Continuous Improvement. 지속적 개선하기 (다음에)

성과 측정 결과를 바탕으로 전략을 조정하거나 보완한다.
효과가 검증된 전략은 확대하고, 효과가 낮은 전략은 개선하거나 중단한다.

 

왜 하나?

시장 환경과 고객 반응은 지속적으로 변하므로, 한 번의 실행으로는 충분하지 않다.

 

하면 무엇이 좋나?

데이터 기반 의사결정 문화가 정착되고, 장기적인 경쟁력이 강화된다.

 

예시

"SNS 광고는 높은 성과를 보였으나 이메일 마케팅 효과는 미미하여, 다음 분기에는 이메일 캠페인 대신 인플루언서 마케팅을 강화하기로 결정하였다."

5. Share. 공유하기

분석 결과를 이해관계자가 이해할 수 있도록 전달하는 단계

분석 결과가 아무리 유용해도 이해관계자에게 전달되지 않으면 의미가 없다. 차트, 그래프 등의 시각화를 활용해 결과를 명확하게 표현하고, 다른 사람들이 쉽게 이해하고 활용할 수 있도록 전달한다.


Visualize Results. 결과 시각화하기

분석 결과를 차트, 그래프, 대시보드 등 시각적 형태로 표현한다.
단순히 표로 나열하는 것이 아니라, 전달하고자 하는 메시지에 가장 적합한 시각화 형태를 선택한다.

 

왜 하나?

숫자와 표만으로는 의사결정자가 직관적으로 이해하기 어렵다. 시각화는 복잡한 데이터를 한눈에 이해할 수 있게 한다.

 

하면 무엇이 좋나?

데이터의 핵심 메시지를 빠르게 파악 가능하고, 결과가 더 설득력 있게 전달된다.

 

예시

“신규 고객 수 변화를 막대그래프로, 매출 추세는 선그래프로 표현해 전반적인 흐름을 쉽게 보여주었다.”


Tell a Story with Data. 스토리로 전달하기

데이터 분석 결과를 단순 나열하지 않고,

문제 제기 → 분석 과정 → 발견 → 제안 순서로 이야기처럼 전달한다.

 

왜 하나?

사람들은 단순 데이터의 나열보단, 스토리적 구조로 정리된 내용을 더 잘 이해하고 기억한다.

 

하면 무엇이 좋나?

데이터에 설득력이 더해지고, 청중이 공감하며 실행으로 이어질 가능성이 높아진다.

 

예시

“지난 6개월간 고객 감소 → 모바일 채널 중심 하락 → 경쟁사 프로모션 영향 → 대응 전략 필요”라는 흐름으로 설명했다.”


Audience-tailored Reporting . 청중 맞춤형 보고 (다음에)

보고를 듣는 대상(경영진, 마케팅팀, 개발팀 등)에 맞춰 결과 표현 방식을 조정한다.
경영진에게는 핵심 지표 중심의 요약을, 실무자에게는 상세 데이터와 분석 과정을 제공한다.

 

왜 하나?

모든 청중이 같은 수준의 정보와 세부사항을 필요로 하지 않기 때문이다.

 

하면 무엇이 좋나?

청중이 필요로 하는 부분만 빠르게 이해할 수 있고, 불필요한 정보로 혼란을 주지 않는다.

 

예시

“경영진에게는 1페이지 요약본을, 마케팅팀에게는 채널별 세부 분석 리포트를 제공했다.”


Use Collaboration Tools. 협업 도구 활용하기 (다음에)

노션, 구글 슬라이드, 대시보드 툴(Tableau, Power BI 등) 같은 협업 도구를 활용해 결과를 공유한다.

 

왜 하나?

분석 결과가 문서에만 있으면 활용도가 떨어진다. 협업 도구를 통해 누구나 접근·검토할 수 있어야 한다.

 

하면 뭐가 좋은가요?

팀 간 소통이 원활해지고, 결과가 빠르게 의사결정에 반영된다.

 

예시

“대시보드를 Tableau에 업로드해 실시간으로 확인 가능하게 했다.”


Validate & Collect Feedback. 결과 검증 및 피드백 수집하기 (다음에)

분석 결과를 공유한 후, 이해관계자들의 질문과 피드백을 받아 보완한다.

 

왜 하나요?

분석가는 데이터만 보지만, 실무자는 현장에서 느낀 다른 요인들을 제공할 수 있습니다. 피드백을 통해 결과를 개선할 수 있습니다.

 

하면 무엇이 좋나?

결과에 대한 신뢰성이 높아지고, 실행 가능성이 커집니다.

 

예시

“마케팅팀으로부터 ‘최근 SNS 캠페인 영향도 고려해야 한다’는 피드백을 받고 추가 분석을 진행했다.”

'C. 프로젝트 > 기초 프로젝트' 카테고리의 다른 글

APPASA: Analyze. 분석하기  (0) 2026.01.25
APPASA: Process. 처리하기  (0) 2026.01.25
APPASA: Prepare. 준비하기  (0) 2026.01.25
APPASA: Ask. 질문하기  (0) 2026.01.25
APPASA: 기초 정리  (0) 2026.01.25

+ Recent posts