[코딩 공부] 5일차(2/17)

성철민·2023년 2월 16일
0

배움

목록 보기
5/42

Schedule1. BAEKJOON

파이썬 문제 풀어보기

단계별로 풀어보기('9단계. 2차원 배열' 도전중)


2738번. 행렬 덧셈

개요: 행렬 크기 N * M 만큼의 행렬 A, B를 더하는 프로그램

접근방법: numpy를 사용할 수 없으니 빈 배열을 만들고 for문으로 차례차례 더한다

정답

import sys

N, M = map(int, sys.stdin.readline().split())
array = [[0] * M for _ in range(N)]  # N, M만큼의 0으로 된 빈 배열 만들기
for i in range(2):
    for j in range(N):
        cache = list(map(int, sys.stdin.readline().split())) # cache에 1차원 리스트로 입력값 받음
        for k in range(M):  # j행의 k번째 요소를 각각 더해서 업데이트
            array[j][k] += cache[k]
for m in range(N):
    print(*array[m])  # *(Asterisk)를 이용해 각 행마다 풀어서 출력
  • numpy로 하면 간단한 문제를 너무 복잡하게 풀게 되었다.
  • print(*리스트) 하면 리스트 내 모든 요소를 출력할 수 있다는 것을 기억해두자

Numpy를 사용할 수 있다면?

import sys
import numpy as np

N, M = map(int, sys.stdin.readline().split())
array = np.zeros((N, M))  # N x M 크기의 0으로 된 행렬을 만든다
for i in range(2):
    for j in range(N):
        cache = list(map(int, sys.stdin.readline().split()))
        array[j] += cache  # cache 리스트를 그냥 numpy array에 더할 수 있음

array = np.asarray(array, dtype= int)  # asarray 메소드로 요소 타입은 int로 바꿔줌
for m in range(N):
    print(*array[m])
  • 리스트를 numpy array에 바로 더할 수 있으므로 for문을 하나 줄일 수 있다.


Schedule2. 스파르타코딩클럽

내일배움캠프 5기 합류 전 기본적인 강의를 들어야 한다고 한다.

강의: [왕초보] 비개발자를 위한, 웹개발 종합반

웹개발을 위한 기본적인 강의 (HTML, CSS, JavaScript)

진도

  • fetch : JSON데이터를 받아올 수 있는 API
fetch("URL").then(res => res.json()).then(data => {
            console.log(data)
            });
  • fetch로 데이터를 긁어와서 출력해주는 script
<script>
        function q1() {
            fetch("http://spartacodingclub.shop/sparta_api/seoulair").then(res => res.json()).then(data => {
                let rows = data['RealtimeCityAir']['row']
                $('#names-q1').empty();
                rows.forEach((a) => {
                    let gu_name = a['MSRSTE_NM'];
                    let gu_dust = a['IDEX_MVL'];
                    let temp_html = `<li>${gu_name} : ${gu_dust}</li>`;
                    $('#names-q1').append(temp_html)
                });
            })
        }
    </script>
  • $(document).ready(function () {}) : 웹페이지가 실행될 때 자동으로 실행
$(document).ready(function () {
            fetch("http://spartacodingclub.shop/sparta_api/weather/seoul").then(res => res.json()).then(data => {
                $('#temp').empty();
                $('#temp').append(data['temp']);
            })
        })

감상
전체적으로 맛만 보는 느낌이라 아직 잘 모르겠다. 다음 주에는 JavaScript에 대해서 좀 더 자세히 공부해봐야겠다.


강의: [왕초보] 엑셀보다 쉬운, SQL

웹개발을 위한 기본적인 강의 (SQL)

진도

  • 문자열 다루기
  1. SUBSTRING_INDEX(칼럼, '나누고자 하는 문자열 기준', 순서)
  2. SUBSTRING(칼럼, 첫 숫자, 글자 수)
  • CASE ~ WHEN ~ THEN ~ END:
  1. 구간을 나눠서 조건식 가능
    CASE WHEN 조건 THEN '뭐다'
         WHEN 조건 THEN '뭐다'
     END
  2. 마지막에는 END로 CASE문의 끝을 알려줘야 함
CASE WHEN pu2.point >= (SELECT avg(point) FROM point_users pu) THEN '잘 하고 있어요'
       ELSE '열심히 합시다.'
       END
  • 서브쿼리와 서브쿼리를 합칠 때는 둘을 그냥 INNER JOIN하는 것이 아니라 메인 쿼리문을 만들어 준다음 ( ex. SELECT * FROM (서브쿼리1) ) 거기에 INNER JOIN해서 나머지 다른 하나를 붙여준다.
SELECT * FROM (
SELECT enrolled_id, count(*) as done_cnt FROM enrolleds_detail
WHERE done = 1
GROUP BY enrolled_id
) as A
INNER JOIN
(
SELECT enrolled_id,
       count(current_order) as total_cnt
FROM enrolleds_detail
GROUP BY enrolled_id
) as B
ON A.enrolled_id = B.enrolled_id

with절을 쓴다면

With table1 as (
SELECT enrolled_id, count(*) as done_cnt FROM enrolleds_detail
WHERE done = 1
GROUP BY enrolled_id
), table2 as (
SELECT enrolled_id,
      count(current_order) as total_cnt
FROM enrolleds_detail
GROUP BY enrolled_id
)
SELECT A.enrolled_id, done_cnt, total_cnt FROM table1 as A
INNER JOIN table2 as B
ON A.enrolled_id = B.enrolled_id

감상
이제 쿼리문이 점점 복잡해져서 한 눈에 볼 수 있도록 정리하고 구동 순서도 잘 기억해야겠다. 마서브쿼리문이 나오면서 많이 복잡하다. [완강]


profile
developer

0개의 댓글