목록코드카타 (19)
오랑우탄의 반란
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bG1I6R/btsIsNdjf4X/j4FvAmEm4JN1TOomySoETK/img.png)
오늘도 오랑이는 문제를 풉니다. 삼총사 풀이 과정리스트의 각 인덱스 값이 출력되도록 for문으로 i, j, k 의 범위를 설정해줍니다.i는 0~, j 는 i를 제외하도록 i+1~, k는 i와 j 를 제외하도록 j+1 을 시작점으로 설정해줍니다. 각 인덱스에 대해 출력되는 값을 더한 것이 숫자 3개의 조합이 됩니다. def solution(number): for i in range(len(number)): for j in range(i+1,len(number)): for k in range(j+1,len(number)): answer = number[i]+number[j]+number[k] 숫자 3개의 합이 0이 되면 '삼총사'이기 때문에 i..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yQ8U3/btsIscRJYPG/EUS6cPc6pMWe9Cw2MkXdkK/img.png)
오늘도 오랑이는 문제를 풉니다. 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기문제CAR_RENTAL_COMPANY_CAR CAR_RENTAL_COMPANY_RENTAL_HISTORY CAR_RENTAL_COMPANY_DISCOUNT_PLAN 1. 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 WHERE CAR_TYPE IN ('세단', 'SUV')2. 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 START_DATE, END_DATE 조건3. 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 FEE BETWEEN 50만 AND 200만4. 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력 SELECT CAR_ID, ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b0umAP/btsIrNLhflB/mmPMnKoMYRT15s503Adex0/img.png)
오늘도 오랑이는 문제를 풉니다. 이상한 문자 만들기 풀이 과정해당 문제는 아래와 같이 단계별로 쪼개서 생각해볼 수 있습니다. 1. 각 단어들을 공백 기준으로 나눈다 .split()2. 단어 내의 인덱스 위치를 짝/홀로 나눈다 for문, if 문3. 짝/홀 인덱스 위치에 대해 대문자/소문자가 나오도록 한다 .upper() .lower()4. 결과값을 미리 설정해둔 빈 문자열 변수에 쌓아둔다 변수 += 값5. 해당 변수를 출력한다 우선 전체 문자열 s 의 각 단어들을 공백 기준으로 나눠주고 마지막에 출력값을 쌓아둘 빈 문자열 변수를 설정해줍니다. def solution(d): s = s.split(' ') answer = '' for문을 사용해 s 의 각 단어들에 대해 각 조건을 적용시킨 후 띄어쓰기 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cA3y9X/btsItiiQN7d/YicpRA4CUexeDohMf9FA61/img.jpg)
오늘도 오랑이는 문제를 풉니다. 3진법 뒤집기 풀이 과정3진법이 어떻게 작동하는지부터 알아봅니다. 3진법 ☞ 숫자를 3을 나눴을 때의 나머지와 최종 몫을 역순으로 정렬해서 반환예) 숫자 = 45 일 때 n(3진법) = 1200예) 숫자 = 125일 때 n(3진법) = 11122 즉 3진법대로 숫자 n을 몫이 0이 될 때까지 3으로 나눠서 나머지를 차례대로 정렬하면 문제에서 요구한 '앞 뒤 반전 3진법' 결과물이 이미 나오는 걸 볼 수 있습니다. 밑줄 친 부분에 대해서 while 반복문으로 코드를 작성하면 아래와 같습니다. 결과물을 저장해둘 변수 설정도 잊지 맙시다. 이때 주의해야 할 점은 answer += str(r) 처럼 r 를 문자열로 변환해줘야 answer 에 적재가 된다는 점입니다. ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/PNDat/btsItmrG9yd/pKKRRoFKsG0XJITL7aVfK1/img.png)
오늘도 오랑이는 문제를 풉니다. 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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bSEKiK/btsIq9glCCa/WPn3E14HXwWxRy7ltkjHi0/img.png)
오늘도 오랑이는 문제를 풉니다. 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 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bxSmri/btsIsdPH9yG/nRi6tdNml7z4bdEeCa3d1k/img.png)
오늘도 오랑이는 문제를 풉니다. 기존 입양 시각 구하기 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 그렇기 때문에 해당 문제를 풀기 위해서..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bVEAQY/btsIrLLZrNF/cuQOtppPuk9INoZ4fqr6Y1/img.png)
오늘도 오랑이는 문제를 풉니다. 최대공약수와 최소공배수 최대공약수, 최소공배수의 특징을 알고 활용하는 문제입니다.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 가장 간단한 풀이는 아래와 ..