# product_name, year, and price for each sale_id in the Sales table.
select
p.product_name product_name
, s.year year
, s.price price
from Sales s join Product p on s.product_id = p.product_id
easy
# ID's of users who visited without making any transactions
# The number of times they made these types of visits
select
v.customer_id customer_id,
count(v.visit_id) count_no_trans
from
visits v left join transactions t
on v.visit_id = t.visit_id
where
t.transaction_id is null
group by
v.customer_id
join 절에서 오래걸렸다. v.visit_id = t.visit_id 으로 연결할것을 엉뚱한 컬럼와 visit칼럼을 연결시켜놓고 where, group by 등에서 디버깅 한다고 허덕이고 있었다 ..
from-join-where... 순서를 알고 있으니 디버깅 할 때도 해당 순서로 디버깅하는 습관을 갖자.
종이에 설계하고 푸는 방법.. 꽤나 좋은 방법이다.
# '표준 입력으로 두 개의 정수 n과 m이 주어집니다' : input으로 물어봐야 한다는 뜻임.
n, m = map(int, input().strip().split(' '))
def square(n,m):
for i in range(m):#세로
for j in range(n):#가로
print('*',end='')
print('')
square(n, m)
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
"표준 입력으로 두 개의 정수가 주어진다." 는 뜻은 input()함수를 통해 표준 입력값을 받아야 한다는 뜻이다.
따라서 input() 함수를 사용해주고, 차례로 아래의 과정을 통해 n, m을 받아온다.
그러고 난 뒤 직사각형 생성 함수 정의 및 이중for문 작성.
마지막으로 함수를 호출하는 것을 잊으면 안된다.
print('*',end='')
: *을 출력하는 역할, end='' 은 줄바꿈을 방지하는 역할을 수행한다.print(출력대상, sep='', end=백슬래시n)
sep 과 end= 는 option이며, 기본 end=옵션인 백슬래시n 은 줄바꿈이다.
위 코드에서는 이를 end=''로 변경하여 해당 for문이 종료될때까지 같은 줄에서 *이 출력되도록 바꾸었다.
즉 for문이 끝날때까지 *을 같은 줄에 출력한다.
def solution(n, m):
# greatest common divisor
gcd = None
for div in reversed(range(1, min(n, m)+1)): # 역순으로 하는게 효율적이다. reversed 안하면, 1이 나온다.
if n % div == 0 and m % div == 0:
gcd = div
break
# least common muliple
# lcm = None
# mul = 1
# while True:
# if (max(m,n) * mul) % min(m,n) == 0:
# lcm = (max(m,n) * mul)
# break
# mul += 1
lcm = (n*m) / gcd
return[gcd, lcm]
개념 | 정의 | 역할 | 예시 |
---|---|---|---|
라이브러리 | 여러 모듈을 모아놓은 코드 집합체 | 특정 작업을 수행하는 데 필요한 도구와 기능을 제공 | NumPy , Pandas |
모듈 | 특정 기능을 가진 코드 파일, 함수와 클래스를 포함 | 코드를 논리적으로 그룹화하고 재사용 가능하게 함 | math , os , sys |
패키지 | 모듈을 논리적으로 그룹화한 디렉토리 | 모듈들을 체계적으로 조직하고 네임스페이스 충돌을 방지함 | numpy , requests |
함수 | 특정 작업을 수행하는 독립적인 코드 블록 | 코드를 재사용하고 구조화하며, 복잡한 작업을 단순화함 | len() , print() |
메서드 | 클래스 내에 정의된 함수, 특정 객체의 상태나 동작을 정의 | 객체의 속성을 조작하거나 객체 간의 상호작용을 처리함 | list.append() , str.lower() |
클래스 | 객체를 생성하기 위한 청사진, 속성과 메서드를 포함 | 코드를 더 구조화하고 재사용 가능하게 하며, 객체와 관련된 데이터를 캡슐화함 | class Car: ... |
객체 | 클래스의 인스턴스, 클래스에 정의된 구조와 행동을 구현 | 실제 데이터를 담고 있으며, 클래스에서 정의한 메서드를 사용할 수 있음 | my_car = Car() |
변수 | 데이터를 저장하는 메모리 위치를 가리키는 이름 | 데이터를 저장하고 참조하는 데 사용됨 | x = 10 , name = "Alice" |
상수 | 한 번 할당되면 변경되지 않는 값 | 변하지 않는 데이터를 표현하고 코드의 가독성을 높임 | PI = 3.14159 |
인스턴스 | 클래스에서 생성된 구체적인 객체 | 클래스의 속성값을 갖는 실제 객체로, 메서드를 호출할 수 있음 | car = Car() |
네임스페이스 | 변수 이름을 구분하기 위한 시스템 | 동일한 이름의 변수가 다른 영역에서 독립적으로 사용될 수 있도록 함 | global , local , enclosed , built-in |
스코프 | 변수가 참조될 수 있는 코드 영역 | 변수의 가시성을 제한하고, 네임스페이스와 함께 이름 충돌을 방지함 | 함수 내부, 전역 |
데코레이터 | 함수나 메서드의 동작을 확장하거나 수정하는 데 사용되는 특별한 형태의 함수 | 기존 함수나 메서드를 변경하지 않고도 그 동작을 추가하거나 수정할 수 있음 | @staticmethod , @classmethod , @property |
collection of pre-written code
Numpy: 수치형 데이터 작업에 유용한 라이브러리. 배열(arrays), 행렬(matrics) 등 다차원 배열(narrays)에 능하다.
Pandas: 데이터 조작과 분석을 위한 라이브러리. 두 가지 주요 데이터 구조인 Series와 DataFrame을 제공한다.
Pandas DataFrame에서 데이터를 다루고, NumPy 배열을 사용하여 수치 연산을 수행하는 경우가 많습니다.
Matplotlib: 시각화를 위한 라이브러리.
Scikit-learn: 머신러닝을 위한 라이브러리. 분류, 회귀, 클러스터링 툴을 제공
TensorFlow: 머신러닝 모델을 위한 라이브러리. deep learning, computer vision, natural language processing 에 사용된다.
OpenCV: computer vision에 사용된다.