
오늘 한 일은,
- 기초 프로젝트 준비
- 방문 횟수로 피벗 테이블 만들기
- 파레토 법칙 데이터에 적용해보기
- 방문 횟수와 지출 금액을 기준으로 고객 세그멘테이션 시도하기
- SQL 공부
- [코드카타] SQL 문제 1문제 풀기 (100번)
- 파이썬 공부
- [코드카타] 알고리즘 1문제 풀기 (64번)
팀플: 기초 프로젝트 준비
굴리는 과정 보러가기:
[본캠프 26일차] 부록: [chap 2] 기초 프로젝트 준비③
어제 오후 스크럼 때 수요일까진 발표용 PPT 자료를 만드는 것을 목표로 오늘 각자 할 일을 정했는데그래서 오늘은 이게 말이 되든 안 되든 고객 세그먼트를 해가야 해.. 그나저나 어제 두통이
maandoo.tistory.com

오늘은 그냥 하루종일 비주얼 코드 스튜디오에서 살았다.. 근데도 아직 pandas 뭔지 모르겠다. 그냥 구글이랑 자웅이가 동체 하려고. 하..

그나저나 이러고서 내가 금요일에 발표도 해야 하는 현실이 믿기지 않는다. 하 근데 그냥 지금 한 번 해놓는 게 나을 것 같긴 해서 지금 발표 한 번 해놓는 게 낫다는 걸 이성적으로 이해는 하지만 발표라는 행위를 내가 해야 하는 현실을 부정하고 싶은 것 같다. 오늘 머리 너무 많이 써서 지쳐가지고 부정적으로 사고가 흐르는 것 같기도 하고. 아 얼른 자야겠다.
SQL 공부: [코드카타] SQL 문제 풀기 (100번)
100. (1141) User Activity for the Past 30 Days 1
Write a solution to find the daily active user count for a period of 30 days ending 2019-07-27 inclusively. A user was active on someday if they made at least one activity on that day.
Return the result table in any order.
-- 첫 번째로 시도한 쿼리
SELECT activity_date day,
COUNT(DISTINCT user_id) active_users
FROM Activity
WHERE activity_date BETWEEN SUBDATE('2019-07-27', INTERVAL 30 DAY) AND '2019-07-27'
GROUP BY activity_date


이렇게 제출했더니 집계되는 일자를 보니 내가 작성한 쿼리는 6월 27일부터 집계하면서 문제가 발생한 것이라 다음과 같이 WHERE절을 수정했다.
-- 두 번째로 제출한 쿼리 (정답 처리됨)
SELECT activity_date day,
COUNT(DISTINCT user_id) active_users
FROM Activity
WHERE activity_date BETWEEN SUBDATE('2019-07-27', INTERVAL 29 DAY) AND '2019-07-27' --29일로 수정함
GROUP BY activity_date
파이썬 공부: [코드카타] 알고리즘 문제 풀기 (64번)
64. 체육복
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다.
전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요.
# 첫 번째 시도한 코드 (틀림)
def solution(n, lost, reserve):
for i in lost:
if i in reserve:
reserve.remove(i)
lost.remove(i)
elif i-1 in reserve:
reserve.remove(i-1)
lost.remove(i)
elif i+1 in reserve:
reserve.remove(i+1)
lost.remove(i)
answer = n-len(lost)
return answer

이렇게 테스트 1의 경우엔 기대한 결과값인 5가 아니라 4가 떠서 for문을 거친 lost와 reserve의 상태가 어떤지 출력해봤는데, lost = [4], reserve = [3, 5]인 상태였다. ...왜 lost의 4는 그대로 있는 걸까. elif로 lost의 i가 reserve에 없으면 i-1이 있는지, 그것도 없으면 i+1은 있는지 확인하는 게 안 되는 건가?
# 두 번째로 시도한 코드 ()
def solution(n, lost, reserve):
for i in lost:
if i in reserve:
reserve.remove(i)
lost.remove(i)
for i in lost:
if i-1 in reserve:
reserve.remove(i-1)
lost.remove(i)
for i in lost:
if i+1 in reserve:
reserve.remove(i+1)
lost.remove(i)
answer = n-len(lost)
return answer
첫 번째 코드 중간중간 출력문을 넣어가며 돌려봤는데 왜인지는 모르겠지만 elif 부분이 붙어 있으면 for문이 의도한 대로 lost 리스트 내에 있는 모든 값들에 대해 돌아가질 않고 첫 번째 값만 보는데 그쳤다.
그래서 for문을 여러 개 쓰기 싫었지만 for문을 무려 세 번이나 돌리면서 reserve 리스트에 i가 있을 때, i-1이 있을 때, i+1이 있을 때의 경우를 전부 각각 돌려주니 시험 케이스 2개를 통과해서 제출했다.

제출했더니 반타작... 이번엔 어떤 케이스에서 실패한 건지도 안 알려주는데 나보고 어떡하라고 흑.
이번 문제는 힌트가 있길래 힌트를 확인했다.
- reserve에 있는 학생의 번호가 lost에도 들어있을 경우
- lost와 reserve을 오름차순으로 정렬이 안 돼 있을 경우
def solution(n, lost, reserve):
lost.sort()
reserve.sort()
for i in reserve[:]:
if i in lost:
reserve.remove(i)
lost.remove(i)
for i in reserve:
if i-1 in lost:
lost.remove(i-1)
elif i+1 in lost:
lost.remove(i+1)
answer = n-len(lost)
return answer
'[내배캠] 데이터분석 6기 > 본캠프 기록' 카테고리의 다른 글
[본캠프 28일차] SQL 코드카타, 파이썬 코드카타, 기초 프로젝트 준비⑥ (0) | 2025.03.27 |
---|---|
[본캠프 27일차] SQL 코드카타, 파이썬 코드카타, 기초 프로젝트 준비⑤ (0) | 2025.03.26 |
[본캠프 25일차] SQL 코드카타, 파이썬 코드카타, 기초 프로젝트 준비③ (0) | 2025.03.24 |
[본캠프 24일차] SQL 코드카타, 파이썬 코드카타, 기초 프로젝트 준비② (1) | 2025.03.21 |
[본캠프 23일차] SQL 코드카타, 파이썬 코드카타, 기초 프로젝트 준비 (0) | 2025.03.20 |