목록코드카타 (19)
오랑우탄의 반란
오늘도 오랑이는 문제를 풉니다. 1045. Customers Who Bought All Products 풀이 과정Customer 테이블에서 customer_id 기준으로 정렬했을 때의 product_key 와 Product 테이블의 product_key 가 일치한 경우 customer_id 를 출력하는 쿼리가 필요합니다. 이때 Product 테이블의 값은 모두 distinct 한 값이란 점을 감안하면, customer_id 기준 각 product_key 의 개수와 Product 테이블 값의 개수가 일치한다는 말로 해석할 수 있습니다. 그러면 이제 쿼리는 완료입니다. 우선 customer_id 기준으로 group 하고 count 에 대한 조건을 having 절 안에 넣어줍니다.이때 Customer ..
오늘도 오랑이는 문제를 풉니다. K번째수 풀이 과정commands 리스트의 a에 대해서 i, j 를 각각 인덱스로 출력해 num 에 넣어줍니다. 그리고 num 안의 b 에 대해 정렬을 해준 후 k 에 해당하는 값을 answer 에 넣어줍니다.처음에는 append 안에 pop을 썼는데 자꾸 인덱스 범위가 벗어났다는 오류가 떠서 막혔다가 생각해보니 굳이 pop을 안하고 인덱스로 리스트값을 반환하면 되는 거여서 그렇게 작성했습니다. def solution(array, commands): answer = [] num = [] for a in commands: num.append(array[a[0]-1:a[1]]) for b in num: b.sort..
오늘도 오랑이는 문제를 풉니다. 숫자 문자열과 영단어 풀이 과정2021 카카오 채용연계형 인턴십 문제라길래 조금 쫄았지만 생각보다 개념적인 부분을 확실히 하고 있는지 확인하는 간단한 문제였습니다. 코드를 기깔나게 짜는 것도 언젠가는 중요하겠지만 뭐든 개념부터 확실하게 제대로 배웠는지가 우선인 것 같습니다. 하지만 딕셔너리 작성이 귀찮았던 오랑이는 리스트로 문제를 풀었습니다. 리스트의 값에 대해서, s에 포함된 경우 s의 문자를 해당 인덱스값으로 교체해주는 코드입니다. def solution(s): num = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] for i in num: if..
오늘도 오랑이는 문제를 풉니다. 시저 암호 풀이 과정알파벳 str 을 직접 만들어서 써야 하는 문제입니다. 저는 대문자, 소문자 둘 다 만들기 귀찮아서 하나만 만들어서 활용했습니다. 나중에 다른 사람들의 풀이를 보니 따로 str 작성 없이 함수를 활용해서 간단하게 푸는 방법이 있더군요 ! (정석풀이) 역시 오랑이는 아직 갈 길이 멉니다~ 1차 풀이를 살펴봅시다.각각 소문자, 대문자, 공백에 대한 경우를 나눠서 계산하도록 해야 합니다. 이때 z → a 로 알파벳이 이어지게 하는 게 중요한데, 처음에는 25를 기준으로 25보다 작으면 j, 아니면 (j-26) 형식으로 생각했는데 필요 이상으로 if문이 많아져서 ('아 이렇게 지저분할 일이 없어' 라는 생각으로 풀었읍니다..) 그보다 간단하게 26으로 나눈 나..
오늘도 오랑이는 문제를 풉니다. 최소직사각형 풀이 과정왜인지 모르겠으나 문제를 복잡하게 생각해서 리스트 조작을 두번씩이나 하면서 복잡하게 풀어버렸습니다. 거대해진 코드..def solution(sizes): w = [] h = [] for i in range(len(sizes)): w.append(max(sizes[i][0], sizes[i][1])) h.append(min(sizes[i][0], sizes[i][1])) w.sort(reverse = True) h.sort(reverse = True) return w[0]*h[0] 하지만 이 문제는 max 함수의 속성을 잘 이해하고 있으면 한 줄로 세상 간단하게 풀 수 있는 정말 파..
오늘도 오랑이는 문제를 풉니다. 550. Game Play Analysis IV 풀이 과정우선 날짜 조건을 지정해줍니다. 이전에 봤던 SELF JOIN 을 활용한 문제와 비슷하게 DATEDIFF(날짜1, 날짜2) = 1 AND 날짜2 > 날짜1 조건으로 풀려고 했는데 이보다 더 간단한 시간/날짜 계산 함수가 있었습니다. DATE_ADD & DATE_SUB 시간/날짜 계산 함수사용 방법은 간단합니다. 기준 날짜와 계산 단위를 인수로 받아서 작동합니다. DATE_ADDDATE_ADD(기준날짜, INTERVAL 기간)#예시DATE_ADD(NOW(), INTERVAL 3 DAY)--> 현재 날짜 + 3일 DATE_SUBDATE_SUB(기준날짜, INTERVAL 기간)#예시DATE_SUB(NOW(), INT..
오늘도 오랑이는 문제를 풉니다. 1174. Immediate Food Delivery II 풀이 과정우선 first order에 대한 조건을 정리해줍니다.where (delivery_id, order_date) in (select delivery_id, min(order_date) from delivery group by 1) 그리고 이에 대한 count 를 구해줍니다.avg 함수를 쓰면 우리가 원하는 결과를 sum / 없이 간단하게 구할 수 있습니다. 이때 avg 안에 if __ 1, 0 으로 함수를 넣었는데 따로 숫자를 지정해주지 않아도 알아서 일치하는 값 (True) 에 대해서 1, 불일치 값 (False) 에 대해서 0을 출력해서 평균이 구해집니다. select avg(customer_pref_..
오늘도 오랑이는 문제를 풉니다. 1193. Monthly Transactions I 풀이 과정우선 간단한 조건부터 정리해서 써줍니다.select date_format(trans_date ,'%Y-%m') as month, country, count(id) as trans_count, /*QUERY*/ as approved_count, sum(amount) as trans_total_amount, /*QUERY*/ as approved_total_amountfrom transactionsgroup by 1, 2 ; approved_count 와 approved_total_amount 는 각각 state = 'approved' 라는 조건이 필요한데, ..