TIL 116일차 : 군집화, streamlit 배포, 알고리즘 deque, sql스터디

2024. 4. 14. 20:19회고/TIL(매일)

 

✏️도전한 점


1. 어제 지도학습, 비지도학습 군집화 실습부분 복습

2. 오늘 streamlit 실습 후, 배포 과정 진행 완료

3. 백준 알고리즘 자료구조(큐) 문제 풀고 라이브러리 학습

 

01 지도/비지도 학습 노트필기


추후 첨부

 

02 Streamlit 실습 후 배포


 

Python 라이브러리 : Streamlit 실습

01 streamlit 실행 여부 확인 02 streamlit 실행 → 코드 변경, 저장 후 새로고침 반복 1. 해당 코드를 터미널에 입력하면 웹 어플리케이션이 기본 브라우저에 뜬다. 2. df 만 입력해도 동일하게 띄울 수

specialda.tistory.com

 

03 알고리즘 deque 학습


1. 코딩테스트 스터디에서 내가 문제를 낼 차례가 왔다.

 

2. 2164번: 카드2 (acmicpc.net)

 

3. 아무리 문제를 풀어도 시간 초과의 벽에서 막혔다.

n = int(input())
result = [i for i in range(1, n+1)]

while len(result) > 1:
    result.pop(0)
    result.append(result.pop(0))
print(result[0])

- result.pop()은 즉시 해당 리스트에서 데이터가 제거된다.

- 두 번째 제거는 변수 명명하지 않고 바로 append뒤에 써도 된다.

- while에 조건을 줄 때도 저렇게 쓰면 깔끔하다.

 

- 문제 이유: pop() 함수를 사용하여 리스트의 요소를 삭제할 때마다 모든 요소들을 이동해야 하므로 시간이 많이 소요된다. 특히 리스트의 첫 번째 요소를 삭제할 때는 모든 요소들을 한 칸씩 앞으로 이동시켜야 하므로 이 과정이 반복될수록 시간이 더 많이 걸린다.

 

4. 내가 만들어낸 로직에 간단히 덱(deque)를 입히는 방법을 배웠다.

from collections import deque

n = int(input())
result = deque(range(1, n+1))

while len(result) > 1:
    result.popleft()
    result.append(result.popleft())

print(result[0])

- 파이썬의 deque(덱) 모듈을 사용하여 1부터 n까지의 숫자로 이루어진 deque 자료구조를 생성한다.

- deque는 양 끝에서의 빠른 삽입과 삭제를 지원하는 자료구조이다.

- 여기서는 1부터 n까지의 숫자가 순서대로 deque에 저장된다.

- popleft()를 이용해서 "첫"번째에 해당하는 데이터를 빠르게 제거할 수 있다.

 

04 SQL 쿼리테스트 스터디


select if(g.Grade < 8, 'NULL', s.Name), g.Grade, s.Marks
from Students s, Grades g
where s.Marks between g.Min_Mark and g.Max_Mark
order by g.Grade desc, case when g.Grade >= 8 then s.Name when g.grade <8 then s.Marks end asc;

 

- 고민했던 점은?

마지막으로 등급이 8보다 낮으면 이름으로 "NULL"을 사용하고 등급별로 내림차순으로 나열합니다. 동일한 등급(1-7)을 가진 학생이 두 명 이상 배정된 경우 해당 학생의 점수를 기준으로 오름차순으로 정렬합니다.

 

위와 같은 정렬 조건일 때 사실 저부분을 고려하지 않아도 테스트는 합격되었다.

하지만 고민해보면 좋을 문제여서 order by 부분에 case when을 사용하게 됐다.