코딩 테스트 131

Average Selling Price

[문제]https://leetcode.com/problems/average-selling-price/description/  [풀이]시계열 조인 문제로 두 가지 방법이 있다. 일반적인 조인 방법(merge)과 투 포인터 접근법을 사용한 방법(merge_asof)이다.  일반적인 조인 방법은 모든 가능한 왼쪽-오른쪽 조합을 계산하는 것으로 O(M x N) 의 시간복잡도를 가지며, 이후 필터링 하는 것은 비용이 너무 크다. 반면, merge_asof는 O(N)의 투 포인터 접근법을 사용해 왼쪽과 오른쪽 데이터를 순회하는데, 이는 시간 정렬이 필요하지만, 시계열 데이터 처리에서는 일반적으로 시간 정렬을 필요로 하기 때문에 큰 문제가 되지 않는다.  1. merge 조인 방법먼저 일반적인 조인 방법으로 풀어보자..

Not Boring Movies

[문제]https://leetcode.com/problems/not-boring-movies/  [풀이]1. 조건1) 모듈 연산으로 id가 홀수인 행 필터링2. 조건2) != 연산으로 description이 boring이 아닌 행 필터링3. rating으로 내림차순 정렬 Pandasimport pandas as pddef not_boring_movies(cinema: pd.DataFrame) -> pd.DataFrame: cond1 = cinema['id'] % 2 == 1 cond2 = cinema['description'] != 'boring' return cinema[cond1 & cond2].sort_values(by='rating', ascending=False) SQL# Wri..

개인정보 수집 유효기간

[문제]https://school.programmers.co.kr/learn/courses/30/lessons/150370 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr [풀이]1. 날짜 비교를 datetime 모듈로 진행하였다.2. 월이 28일까지라서 보정작업을 해줘야 한다.3. 월이 28일이면서 달이 12월이면 연도도 보정작업을 해줘야 한다.from datetime import datetimedef solution(today, terms, privacies): answer = [] date_today = datetime.strptime(today, '%Y.%m.%d') dic = {..

Confirmation Rate

[문제]https://leetcode.com/problems/confirmation-rate/description/  [풀이]1. 모든 user_id가 보여야 하므로 Signups 테이블을 기준으로 LEFT JOIN2. action 열에서 confirmed인 행과 아닌 행들을 1과 0으로 나눠서 comfirmation_rate을 mean 함수로 손쉽게 구할 수 있음3. user_id로 그룹화 해준뒤 mean과 round 함수 적용 Pandasimport pandas as pddef confirmation_rate(signups: pd.DataFrame, confirmations: pd.DataFrame) -> pd.DataFrame: df = pd.merge(signups, confirmations..

바탕화면

[문제]https://school.programmers.co.kr/learn/courses/30/lessons/161990 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  [풀이]1. 드래그의 시작점과 끝점의 규칙을 찾는다.2. 드래그 시작점(lux, luy) 에서 lux는 파일 처음 나오는 행, luy는 파일이 처음 나오는 열이 된다.3. 드래그 끝점(rdx, rdy) 에서 rdx는 (파일이 존재하는 마지막 행 + 1), rdy는 (파일이 존재하는 마지막 열 + 1) 이 된다.4. 격자판을 완전탐색하면서 '#' 문자가 나오면 행과 열을 저장한다.5. min, max 함수를 이용해서 해당 값들을 구해준..

성격 유형 검사하기

[문제]https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr [풀이] 1. 딕셔너리를 통해 각 유형을 key로 해서 점수를 구해준다.2. 각 지표별로 타입을 가져오고, 해당 타입을 key로 하여 점수를 가져온다.3. 점수를 비교해서 성격 유형을 선택한다. 점수가 같을 때에는 사전순으로 가져오게끔 한다. from collections import defaultdictdef solution(survey, choices): person_type = defaultdict(int) answer..

Students and Examinations

[문제]https://leetcode.com/problems/students-and-examinations/description/?source=submission-ac [풀이]cross로 조인한 테이블과 미리 집계한 테이블을 이어 붙일 생각을 할 수 있어야 풀 수 있는 문제다.판다스로 문제를 풀 때는 테이블을 무작정 이을 생각이 아니라 처리를 먼저 한 다음에 붙일 줄 알아야 한다. Pandasimport pandas as pddef students_and_examinations(students: pd.DataFrame, subjects: pd.DataFrame, examinations: pd.DataFrame) -> pd.DataFrame: merged = pd.merge(students, subj..

햄버거 만들기

[문제]https://school.programmers.co.kr/learn/courses/30/lessons/133502 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr [풀이]1. 재료를 하나씩 꺼내와서 리스트 안에 넣고2. 끝에 4개 부분만 가져와서 [1, 2, 3, 1]과 같은지 확인 한 뒤3. 같으면 끝에 4개 부분을 지워주고 카운트를 1 증가시킨다 def solution(ingredient): food = [] cnt = 0 for z in ingredient: food.append(z) if food[-4:] == [1, 2, 3..