[240703 TIL] 코드가 내려와~ (+블로그 이사)
그간 작성해오던 벨로그를 떠나 티스토리를 개설했다.
블린이에 코드까지 익숙치 않은 나에게 코드로 표 만들고, 강조하고 등등 벨로그의 시스템이 너무 어려웠기 때문이다.
티스토리에 발을 들인 역사적인 첫 날을 기념하며 오늘의 TIL (today i learn) 시작!🥳
(사실 글 작성하다 한 번 날려 먹었다..)
[파이썬 문제] 서울에서 김서방 찾기
String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
def solution(seoul):
v = 0
for x in seoul:
if x == "Kim":
return "김서방은 "+str(v)+"에 있다"
v = v + 1
첫 문장부터 for 반복문을 써야겠다는 생각이 들었다. 그리고 왜인지 모르게 if 조건문이 쓰일 것 같았다. (나의 직감이란...😮)
1. seoul 이라는 솔루션 함수를 정의해 준다.
2. v라는 변수를 선언해 0을 만든다. (이때 for문의 리스트가 0부터 시작한다는 의미!)
3. seoul 이라는 리스트 속 x라는 요소를 가진 for 반복문을 작성한다.
4. if 조건문을 사용해 리스트 속 요소인 x가 Kim과 같다면,
5. 김서방은 v에 있다를 리턴한다.
6. kim이 몇번째 순서에 있는지 알기 위해서 for문 안에 v=v+1을 넣어서 for 반복문을 돌림
✅POINT
v = 0
for x in seoul:
if x == "kim":
retrun "김서방은 "+str(v)"에 있다"
v = v + 1
#김서방은 v 번에 있다
v = 1
for x in seoul:
if x == "kim":
retrun "김서방은 "+str(v)"에 있다"
v = v + 1
#김서방은 v + 1 번에 있다
for 반복문이 돌아가는 작동원리를 알아야 구조를 이해할 수 있음..!!
마지막 줄에 계속해서 1을 더해줌으로써 몇 번째에 있는지 알 수 없는 김서방을 찾게 됨.
[파이썬 문제] 콜라츠 추측
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.
1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.
def solution(num):
if num == 1:
return 0
n = 0
while num != 1:
if num%2 == 0:
num = num/2
elif num%2== 1:
num = num*3+1
n = n+1
if n > 500:
return -1
if num == 1:
return n
1. num이라는 solution 함수를 정의함
2. '단 주어진 수가 1인 경우에는 0을' 이라는 조건
4. 반복문을 0부터 실행시키기 위해 n =0 이라 설정
5. 반복문 while을 사용해 계속해서 반복
6. if문으로 조건들을 설정함
10. while문이 계속해서 1씩 더해 돌아가기 위해 설정
11. 작업을 500번 반복할 때까지 1이 되지 않는다면 -1 반환 조건에 대한 if문
12. 결과로 나온 수에 같은 작업을 1이 될때까지 반복합니다에 대한 if문
✅POINT
while 반복문
: 조건문이 참인 동안 while 문에 속한 문장들이 반복해서 수행된다.
[SQL 문제] 있었는데요 없었습니다
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. ANIMAL_OUTS 테이블의 ANIMAL_ID는 ANIMAL_INS의 ANIMAL_ID의 외래 키입니다.
관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.
SELECT ai.animal_id,
ai.name
From
animal_ins ai
left join animal_outs ao on ai.animal_id=ao.animal_id
where ai.datetime > ao.datetime
order by ai.datetime
- 보호 시작일보다 입양일이 더 빠른 동물의 ➡️ 조건, where절 사용
- 보호시작일과 입양일 데이터가 필요함 ➡️ Join을 이용해 두 테이블을 합쳐줌
- 보호 시작일이 빠른 순으로 조회 ➡️ order by 사용
[SQL 문제] 상품 별 오프라인 매출 구하기
다음은 어느 의류 쇼핑몰에서 판매중인 상품들의 상품 정보를 담은 PRODUCT 테이블과 오프라인 상품 판매 정보를 담은 OFFLINE_SALE 테이블 입니다. PRODUCT 테이블은 아래와 같은 구조로 PRODUCT_ID, PRODUCT_CODE, PRICE는 각각 상품 ID, 상품코드, 판매가를 나타냅니다. 상품 별로 중복되지 않는 8자리 상품코드 값을 가지며, 앞 2자리는 카테고리 코드를 의미합니다.
OFFLINE_SALE 테이블은 아래와 같은 구조로 되어있으며 OFFLINE_SALE_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 오프라인 상품 판매 ID, 상품 ID, 판매량, 판매일을 나타냅니다. 동일한 날짜, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.
PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.
Select p.PRODUCT_CODE,
sum(p.price*o.sales_amount) SALES
from
product p Inner join offline_sale o on p.PRODUCT_ID = o.PRODUCT_ID
group by 1
order by 2 desc, 1
- 상품 코드별 매출액(판매가판매량) 합계
➡️ Product 테이블의 판매가(price) 컬럼과 offline_sale 테이블의 sales_amount 컬럼을 join
➡️ 매출액 합계 sum(priceoffline_sale)
➡️ 상품 코드별 Group by product_code - 매출액을 기준 내림차순, 매출액이 같다면 상품코드 기준 오름차순
➡️ order by