목록코테 (32)
오랑우탄의 반란
오늘도 오랑이는 문제를 풉니다. 소수 만들기 풀이 과정해당 문제는 크게 두 파트로 나눠서 풀어야 합니다.nums 의 값 3개씩 조합소수 판별첫번째 조건에 대한 코드를 짜봅니다.def solution(nums): for i in range(len(nums)): for j in range(i+1,len(nums)): for k in range(j+1,len(nums)): num = nums[i] + nums[j] + nums[k] 예전에 풀었던 삼총사 문제와 동일한 방식입니다. 어떤 수 n이 소수가 되려면 인수가 1과 자기 자신 n 뿐이어야 합니다. 또한 0 과 1 은 소수가 될 수 없습니다. 즉, n 은 2 이상의 숫자가 되며 그 인수..
오늘도 오랑이는 문제를 풉니다. 모의고사 풀이 과정각 수포자의 답이 answers 리스트와 일치하는지 비교일치할 경우 리스트 형태로 각각 점수 부여부여된 점수 중 최고값에 해당하는 인덱스값 + 1 을 리스트로 반환 위 조건에 따라 코드를 설계해봅시다.우선 전체 점수와 각 수포자의 답을 리스트 형태로 저장해줍니다. def solution(answers): answer = [] score = [0,0,0] g1 = [1,2,3,4,5] g2 = [2,1,2,3,2,4,2,5] g3 = [3,3,1,1,2,2,4,4,5,5] 이제 조건을 나열해봅시다. 각 수포자에 대해 answers[ i ] 와 g[ i % 리스트 길이] 를 비교해줍니다. 나머지값으로 answers 길이가..
오늘도 오랑이는 문제를 풉니다. 1907. Count Salary Categories 풀이 과정첫 시도는 아래와 같이 각 가격에 대한 case를 나눠서 풀었습니다. 하지만 이렇게 풀 경우, 보이는 바와 같이 'Average Salary' 에 대한 칼럼이 나오지 않습니다. select case when income 50000 then 'High Salary' else 'Average Salary' end as category, count(account_id) as accounts_countfrom accounts group by category ifnull 로 count를 감싸는 것으로 해결되는 문제인가 싶었지만 생각을 해보니 오랑이가 작성한 case 문은 True/F..
오늘도 오랑이는 문제를 풉니다. 1204. Last Person to Fit in the Bus 풀이 과정turn 기준으로 정렬한 것에 대한 각 weight 의 누적합이 필요한 문제입니다.누적합을 구할 수 있는 방법은 self join 으로 sum, group by 하는 방법과, sum() over() window function 을 사용하는 방법 크게 두 가지가 있습니다. 누적합 윈도우 함수SELECT column1, column2, SUM(더할 칼럼) OVER (ORDER BY 정렬기준) as CumulativeSumFROM table_name; 사용예시SELECT Date, Sales, SUM(Sales) OVER (ORDER BY Date) as CumulativeSalesFROM daily_s..
오늘도 오랑이는 문제를 풉니다. 과일 장수 풀이 과정score 를 순서대로 나열개수 m 씩 쪼개고 그 중 최솟값에 대해 더해서 m 을 곱한 값을 리턴위의 순서대로 진행하는 코드를 생각했습니다. 차례대로 코드를 짜봅시다. def solution(k, m, score): score.sort(reverse=True) return score #순서 확인 설명을 위한 편의 상 answer 를 리스트로 지정해서 리스트에 반복문의 결과물이 적재되는 과정이 보이도록 수정했습니다. def solution(k, m, score): answer = [] score.sort(reverse=True) for i in range(len(score)//m): answer.append(mi..
오늘도 오랑이는 문제를 풉니다. 2016년 풀이 과정필수는 아니지만 없으면 허전하기 때문에 2016년 달력을 한 번 봅시다.이 문제에서 주목해야 할 부분은 아래 두 가지입니다:날짜 % 7 = 1 은 금요일각 월의 날짜들은 이어지기 때문에 이전 월의 일수에 날짜를 더한 값 = 날짜즉, 요일과 월별 일수를 나열한 리스트 2개를 작성해주고 여기서 값을 추출해서 계산해주는 방식으로 풉니다.아까 나머지가 1일 때 금요일이기 때문에 리스트 인덱스와 맞춰서 작성해줍니다.또한 이전 달의 날짜에 b 를 더해야 하기 때문에 month 리스트는 0부터 시작하도록 해줍니다. def solution(a, b): weekday = ['THU','FRI','SAT','SUN','MON','TUE','WED'] mont..
오늘도 오랑이는 문제를 풉니다. 1164. Product Price at a Given Date 풀이 과정CTE 를 사용해서 푸는 연습을 해봅니다. 우선 change_date 가 '2019-08-16' 보다 작거나 같은 경우에 대한 조건을 지정해줘야 합니다. 예전 프로그래머스 자동차 대여 문제와 동일한 방식으로 8월 16일에 대해서 1, 아니면 0으로 값을 지정해주고 sum 으로 묶어서 푸는 방식인줄 알았지만, 해당 경우는 8월 16일이 존재하는지 여부가 중요한 것인 반면, 이번 문제는 8월 16일까지의 가장 최신 값과 그 이후에 대한 값은 또 다르게 지정하는 경우여서 각각 분리해서 풀어야 했습니다. change_date 각 product_id별로 change_date 가 최신값인 행을 구해야 하는 ..
오늘도 오랑이는 문제를 풉니다. 180. Consecutive Numbers 풀이 과정처음에는 문제에서 요구한 조건을 말그대로 생각해서 having count() 를 사용해 풀고자 했는데 이것은 틀린 풀이입니다.이유는 l2.num - l1.num = 0 은 숫자를 출력하는 것이 아닌 boolean 값 즉 True/False 를 출력하는 것이기 때문에 적합하지 않기 때문입니다. having count(l2.num - l1.num = 0) >= 3 대신 아주 간단하게 self join 과 where 조건절을 활용해서 아래와 같이 풀 수 있습니다. 최종 코드select distinct l1.num as ConsecutiveNumsfrom logs l1 join logs l2 on l2.id - l1.id ..