목록분류 전체보기 (90)
오랑우탄의 반란

오늘도 오랑이는 문제를 풉니다. 이상한 문자 만들기 풀이 과정해당 문제는 아래와 같이 단계별로 쪼개서 생각해볼 수 있습니다. 1. 각 단어들을 공백 기준으로 나눈다 .split()2. 단어 내의 인덱스 위치를 짝/홀로 나눈다 for문, if 문3. 짝/홀 인덱스 위치에 대해 대문자/소문자가 나오도록 한다 .upper() .lower()4. 결과값을 미리 설정해둔 빈 문자열 변수에 쌓아둔다 변수 += 값5. 해당 변수를 출력한다 우선 전체 문자열 s 의 각 단어들을 공백 기준으로 나눠주고 마지막에 출력값을 쌓아둘 빈 문자열 변수를 설정해줍니다. def solution(d): s = s.split(' ') answer = '' for문을 사용해 s 의 각 단어들에 대해 각 조건을 적용시킨 후 띄어쓰기 ..

오늘도 오랑이는 문제를 풉니다. 3진법 뒤집기 풀이 과정3진법이 어떻게 작동하는지부터 알아봅니다. 3진법 ☞ 숫자를 3을 나눴을 때의 나머지와 최종 몫을 역순으로 정렬해서 반환예) 숫자 = 45 일 때 n(3진법) = 1200예) 숫자 = 125일 때 n(3진법) = 11122 즉 3진법대로 숫자 n을 몫이 0이 될 때까지 3으로 나눠서 나머지를 차례대로 정렬하면 문제에서 요구한 '앞 뒤 반전 3진법' 결과물이 이미 나오는 걸 볼 수 있습니다. 밑줄 친 부분에 대해서 while 반복문으로 코드를 작성하면 아래와 같습니다. 결과물을 저장해둘 변수 설정도 잊지 맙시다. 이때 주의해야 할 점은 answer += str(r) 처럼 r 를 문자열로 변환해줘야 answer 에 적재가 된다는 점입니다. ..

오늘도 오랑이는 문제를 풉니다. 1251. Average Selling Price 풀이 과정문제를 제대로 읽고 파악합시다. 처음 작성한 코드는 아래와 같았는데 틀렸습니다. 왜 그런가 단계별로 쿼리를 돌려보며 살펴봤는데 JOIN 했을 때 모든 테이블을 뽑아보니 product_id 별로 값이 중복으로 출력되는 것을 봤습니다. 즉, 제대로 JOIN 이 안 되었다는 걸 알 수 있지요. SELECT p.product_id, round(sum(units*price)/sum(units),2) as average_priceFROM prices p JOIN unitssold u ON p.product_id = u.product_id GROUP BY p.product_id 문제를 다시 살펴봅니다. 1. 조건 이슈ave..

오늘도 오랑이는 문제를 풉니다. 1934. Confirmation Rate 조인을 활용해서 쉽게 풀 수 있는 문제입니다. SELECT s.user_id , round(ifnull(c2.confirm / c1.total,0),2) AS confirmation_rateFROM signups s left join (select user_id, count(*) as total from confirmations group by 1) c1 on s.user_id = c1.user_id left join (select user_id, count(*) as confirm from confirmations where action = 'confirmed' group by 1) c2 ..

오늘도 오랑이는 문제를 풉니다. 기존 입양 시각 구하기 1 문제와 동일한 대신, HOUR 가 0~23까지 전부 표시되는 형식으로 출력되게 하는 문제입니다. 푸는 방법을 몰라서 오늘도 열심히 구글링 해봅니다. 입양 시각 구하기(2) 우선 기존 코드는 아래와 같습니다. 간단하죠?이렇게 하면 HOUR 가 7~19인 값에 대해서만 출력이 됩니다. IFNULL 을 사용해서 값이 없을 때 0으로 표시되도록 쿼리를 짜도, 애초에 HOUR 값이 없기 때문에 최종 결과물에 표시되지 않는 것을 보실 수 있습니다. SELECT HOUR(DATETIME) AS HOUR, IFNULL(COUNT(1),0) AS COUNTFROM ANIMAL_OUTSGROUP BY 1ORDER BY 1 그렇기 때문에 해당 문제를 풀기 위해서..

오늘도 오랑이는 문제를 풉니다. 최대공약수와 최소공배수 최대공약수, 최소공배수의 특징을 알고 활용하는 문제입니다.1. 최대공약수 = 두 수 중 큰 수를 작은 수로 나눴을 때의 나머지 값 m%n2. 최소공배수 = 두 수의 곱을 최대공약수로 나눈 값 (m*n) / (m%n) 그래서 아래와 같이 풀었는데 어김없이 틀렸습니다. 입력이 9, 7 일 때의 케이스에 대한 나머지 계산이 더 필요하기 때문입니다. def solution(n, m): b, a = max(n,m), a = min(n,m) if b%a == 0: answer = [a,b] else: answer = [b%a,(b*a)/(b%a)] return answer 가장 간단한 풀이는 아래와 ..

오늘도 오랑이는 문제를 풉니다. 570. Managers with at Least 5 Direct Reports 셀프조인을 사용해서 풀 수 있는 간단한 문제입니다.SELECT E1.NAMEFROM EMPLOYEE E1 JOIN EMPLOYEE E2 ON E1.ID = E2.MANAGERIDGROUP BY E1.ID, E1.NAMEHAVING COUNT(E2.MANAGERID) >= 5; 하지만 주말 동안 뇌를 비운 오랑이는 순간 착각하고 멍청한 실수를 해버립니다.HAVING COUNT(DISTINCT E2.MANAGERID) 로 작성해서 틀려버렸습니다.공통 값에 대해 JOIN 되고 GROUP BY 로 묶였기 때문에 E2.MANAGERID 칼럼의 값들은 NULL 값 제외, 그리고 E1.ID 와 E1.N..

테이블을 자기 자신과 조인하는 셀프 조인에 대해 알아보겠습니다. SELF JOIN은 한 테이블 내에서 칼럼 간, 개별 값 간 대조가 필요할 때 사용할 수 있습니다. 문법은 JOIN/쉼표로 연결하고 (필수) 별칭을 붙여줍니다.SELECT column_name(s)FROM table1 T1, table1 T2WHERE condition; 아래 두 가지 예시로 SELF JOIN의 활용을 살펴보겠습니다. LeetCode | 197. Rising Temperaturehttps://leetcode.com/problems/rising-temperature/ 하나의 테이블 내의 날짜 값과 온도 값에 대한 비교가 필요하기 때문에 self join 을 사용해서 이어줍니다. from weather w1 join we..