내일배움캠프 5기 합류 전 기본적인 강의를 들어야 한다고 한다.
웹개발을 위한 기본적인 강의 (HTML, CSS, JavaScript)
진도
- JavaScript, jQuery, Fetch 공부하기
- Java와 JavaScript 사이에 관계 없음
<script>
태그를 이용해서 JavaScript 작성 가능<button>
호출해서 버튼 클릭 시 함수 호출 가능- JavaScript
1. 변수와 리스트, 딕셔너리 등의 자료형
2. 딕셔너리: key와 value로 이루어져 있음- JQuery
1. JQuery는<div id="">
이런 식으로 지칭해줌
<script>
내 함수 등에서$(#id)
로 id 호출가능$('#id').text(텍스트)
: id의 텍스트를 JQuery의 텍스트로 하라$('#id').css('color', 'red')
: id의 텍스트 컬러를 red로 하라- 반복문: 리스트 내의 모든 값을 하나씩 꺼내올 수 있다 (.forEach)
리스트.forEach((변수) => { console.log(변수) })
- 조건문 : if ~ else
- JavaScript
1. 백틱(`)을 쓰면 백틱 안에 변수를 넣을 수 있다.let temp_html = `<p>${a}</p>`
- JQuery
1. id.append() : 괄호 안의 값을 붙여줌
- id.empty() : id 안의 값을 비워줌
- JSON ( JavaScript Object Notation )
1. 데이터를 저장하거나 전송할 때 많이 사용하는 경량 DATA 교환 방식
- 단순히 데이터를 표시하는 표현 방법
- 일반적으로 서버와 클라이언트 간의 교류에서 많이 사용
감상
웹사이트에서 HTML, CSS, Javascript, JQuery를 함께 사용할 수 있었다. 아직 기초 부분이라 쉽지만 익숙해지도록 해야겠다.
웹개발을 위한 기본적인 강의 (SQL)
진도
- LEFT JOIN : NULL값이 생성될 가능성이 있음. 왼쪽 테이블을 기준으로 오른쪽 테이블에 없는 값을 찾아낼 때 사용
- UNION ALL : 위와 아래의 테이블을 전부 합칠 수 있음 ( order는 깨짐 )
- Subquery
1. WHERE에 들어가는 경우
- SELECT에 들어가는 경우
- 메인 쿼리문이 돌아갈 때마다 서브쿼리문이 호출된다
- FROM에 들어가는 경우(***)
- 서브쿼리문 속에서 데이터를 뽑아올 수 있다.
- With : 서브쿼리문을 메인쿼리문에 전부 적는 대신 쿼리문 맨 위에 임시 table로 저장할 수 있다.
WITH table1 as ( select course_id, count(distinct(user_id)) as cnt_checkins from checkins group by course_id ), table2 as ( select course_id, count(*) as cnt_total from orders group by course_id ) select c.title, a.cnt_checkins, b.cnt_total, (a.cnt_checkins/b.cnt_total) as ratio from table1 a inner join table2 b on a.course_id = b.course_id inner join courses c on a.course_id = c.course_id
감상
이제 쿼리문이 점점 복잡해져서 한 눈에 볼 수 있도록 정리하고 구동 순서도 잘 기억해야겠다. 마서브쿼리문이 나오면서 많이 복잡하다.
파이썬 문제 풀어보기
개요: 2보다 큰 짝수 n이 주어졌을 때, 두 소수의 합이 n이 되는 두 소수를 출력
초기 접근:
1. 에라스토테네스의 체로 입력받은 n만큼의 소수를 구한다
2. 이 소수를 작은 수부터 반복시켜 두 소수를 구한다
def sieve(n):
prime_number = [True] * (n + 1)
prime_number[0] = prime_number[1] = False
for i in range(2, int(n ** 0.5) + 1):
if prime_number[i]:
for j in range(i * i, n + 1, i):
prime_number[j] = False
collecting = [x for x in range(len(prime_number)) if prime_number[x]]
return collecting
T = int(input())
for repeat in range(T):
N = int(input())
prime_number_list = sieve(N)
max_value = 0
for climb_up in prime_number_list:
if climb_up > N // 2:
break
if (N - climb_up) in prime_number_list and (N - 2 * climb_up >= 0):
max_value = max(max_value, climb_up)
print(max_value, N - max_value)
- 정답은 나왔지만 시간 초과가 되었다.
- 각 케이스마다 소수를 구하는 탓에 시간복잡도가 증가한 것으로 보인다.
- 소수 리스트를 한번 저장해두고 그 다음 케이스의 n이 더 크다면 추가로 소수를 리스트에 추가하는 방식으로 해야할 것 같다.
def sieve(n):
prime_number = [True] * (n + 1)
prime_number[0] = prime_number[1] = False
for i in range(2, int(n ** 0.5) + 1):
if prime_number[i]:
for j in range(i * i, n + 1, i):
prime_number[j] = False
collecting = [x for x in range(len(prime_number)) if prime_number[x]]
return collecting
T = int(input())
prime_number_list = sieve(10000)
for repeat in range(T):
N = int(input())
max_value = 0
for t in range(N // 2, 0, -1):
if t in prime_number_list and (N - t) in prime_number_list:
print(t, N - t)
break