첫 답안(오답)
def solution(arr, divisor):
answer = []
for i in arr:
if i % divisor == 0:
answer.append(i)
if i % divisor != 0:
answer.append(-1)
return answer.sort(reverse=False)
결괏값이 null이 나왔다. 일단 return에 문제가 있어 보인다.
찾아보니 list.sort()는 리스트를 정렬하지만 none을 반환하기 때문에 return에 쓰기에 적절하지 않음을 깨달았다.
대안으로 sorted(answer)와 같이 쓰면 오름차순 정렬된 리스트가 반환된다.
아니면 중간에 answer.sort()를 한 번 쓰고 answer를 반환해도 되겠다.
그리고 'divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.'라는 조건이 if i % divisor != 0 에 부합하는가? 아닌 것 같다.
divisor로 나누어 떨어지는 element가 하나도 없다, 그러면 반복문을 끝내고 나서 answer에 들어간 요소가 하나도 없다고 받아들여도 될 것 같다.
두 가지 방법이 있다.
1. if not answer 이용, 2. if len(answer)==0 이용
answer에 없다, answer 길이가 0이다 => 어쨌든 같은 조건이다.
list를 만드는 for 반복문을 좀 더 간편하게 한 줄로 나타낼 수 있지 않을까?
answer = [i for i in arr if i % divisor == 0] 이러면 바로 리스트 생성 가능.
수정 답안(정답)
def solution(arr, divisor):
answer = [i for i in arr if i % divisor == 0]
if not answer:
return [-1]
return sorted(answer)
길이가 같은 리스트 2개가 있다. 불린 연산자는 true->양수, false->음수에 대응된다.
그러면 absolutes와 signs의 요소를 하나씩 대응시켜 곱하면 좋지 않을까?
for문으로도 가능하겠지만, 여러 개의 리스트를 같이 다룰 수 있으면 좋을 것 같다.
새로운 문법 zip(iterable1, iterable2...) 적용하는 건 어떨까?
여러 개의 리스트, 튜플과 같은 반복 가능한 값을 입력받아 각각의 같은 인덱스에 위치한 값들끼리 튜플로 묶어준다고 한다.
zip은 길이가 가장 짧은 iterable까지만 작동한다.zip을 쓴다고 치자. 그럼 answer = [~ for ~ in zip(absolutes, signs)]가 될 것이다.
absolutes의 요소를 a, signs의 요소를 s라 하자.
answer = [a if s else -a for a, s in zip(absolutes, signs)]로 쓸 수 있다.
즉, answer의 element는 s일 경우에 a, ~s일 경우에 -a=> true일 경우에 a, flase일 경우에 -a
정답
def solution(absolutes, signs):
answer = [a if s else -a for a, s in zip(absolutes, signs)]
return sum(answer)
그룹별로 가장 최댓값을 가진 ROW를 추출해야 함.
즉 MAX를 써야함. 그런데 그룹별로 MAX(FAVORITES)을 어떻게 구할까?
일단 FOOD_TYPE별로 FAVORITES의 최댓값을 가져와야 한다.
그럼 FOOD_TYPE별 최대 FAVORITES 값을 추출하는 INLINE VIEW를 만들고, 최댓값을 기준으로 JOIN하면 가능할 것이다.
참고로 LEFT JOIN은 안된다.
정답(구글 참고)
SELECT
FOOD_TYPE,
REST_ID,
REST_NAME,
FAVORITES
FROM REST_INFO A
JOIN(
SELECT MAX(FAVORITES) MAX_FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
) B ON A.FAVORITES = B.MAX_FAVORITES
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC;
오늘의 글: 사용자 행동 데이터 분석: 넷플릭스와 아마존은 데이터 분석을 어떻게 할까요?
저번 아티클 스터디 시간에는 사용자 행동 데이터 분석: 사용자 행동 데이터 왜 필요할까요?를 읽으며 사용자 행동 데이터 분석이란 무엇이고 왜 해야 하는지 알아보았다. 한 마디로 시간과 비용이 적게 들고 세세한 분석이 가능하기 때문에 여러 분야에서 주목하고 있다는 것이었다.
이번 글에서는 실제 사례를 바탕으로 회사들이 어떤 식으로 사용자 행동 데이터 분석을 진행하는지 알아보고, 분석 결과가 비즈니스에는 어떤 영향을 미칠 수 있는지 살펴보았다고 한다.
- 요약
- 사용자 행동 데이터로 분석할 수 있는 것: 사용자들이 서비스 내에서 행동한 대부분의 활동 추적 가능 (사용 순서, 관심 기능, 이탈 시점 등)
- 사용자 행동 데이터 활용 사례
- 넷플릭스: ‘어떤 콘텐츠를 제작(수급)해야 사용자들의 반응이 좋을까?’가 핵심.
- 콘텐츠를 어디서부터 어디까지 신청했는가
- 언제 시청을 멈추거나 일시정지를 하는가
- 어떤 기기로 시청하는가
이 데이터 기반으로 ‘미국판 하우스 오브 카드’ 제작, 신규 가입자 유치 및 이탈률 감소.
- 아마존: 웹사이트 로딩이 길수록 판매 감소⇒로딩 시간 개선.
AI를 학습시켜 사용자의 관심사에 맞는 맞춤형 페이지를 구성
평균 구매 전환율 13% 달성(국내 온라인 쇼핑몰 평균 6%)- 실생활 맞춤 광고:
ex유모차 ⇒ 데이터가 없다면 무작정 ‘아이를 키우는 엄마일 가능성이 높은 2-30대 여성 대상’의 광고를 뿌렸을 것. 그러나 요즘에는 애견인들이 강아지를 태우기 위해 유모차에 관심이 있는 경우가 많음.
유모차 관심 없는 미혼 20대 여성 vs 강아지 때문에 유모차에 관심이 있는 아저씨 ⇒ 후자 유리.- 다른 서비스에는 어떻게 활용할 수 있을까?
- 뉴스레터
뉴닉: 콘텐츠 기업은 ‘어떤 콘텐츠를 만들어야 사용자들이 좋아할까’를 항상 고민.
-날짜별로 클릭이 많은 콘텐츠
-스크롤을 끝까지 내린 콘텐츠
-10초 이상 머무른 콘텐츠
사용자들이 해당 주제에 관심이 많다는 증거- 사용자 행동 데이터를 직접 보고 싶다면?
Omnibug: 구글 애널리틱스를 통해 수집할 수 있는 웹사이트 어느 곳이든 사용자 해동 데이터를 어떻게 쌓고 있는지 직접 확인 가능- 주요 포인트 : 회사는 어떤 식으로 사용자 행동 데이터를 분석하고 분석 결과가 비즈니스에는 어떤 영향을 미칠 수 있는가?