티스토리 뷰

SQL 코드카타

Q79. 595. Big Countries

1. 문제 링크: https://leetcode.com/problems/big-countries/description/

2. 정답 코드:

SELECT
    name,
    population,
    area
FROM World
WHERE area >= 3000000 or population >= 25000000
ORDER BY name;

 

Q80. 1148. Article Views I

1. 문제 링크: https://leetcode.com/problems/article-views-i/description/

2. 정답 코드:

SELECT DISTINCT author_id as id
FROM Views
WHERE author_id = viewer_id
ORDER BY author_id;

 

Q81. 1683. Invalid Tweets

1. 문제 링크: https://leetcode.com/problems/invalid-tweets/

2. 정답 코드:

SELECT tweet_id
FROM Tweets
WHERE length(content) > 15
ORDER BY tweet_id;

3. 오류 상황: 함수 오류 및 일부 행에서 원하는 결과값이 나오지 않음

4. 시도 방법: 함수 제대로 사용했는지 확인, 초과/이상 조건 확인

5. 최종 문제 해결 방법: len → length 함수 사용, 초과로 조건 변경해서 실행

원래 len 함수도 사용 가능한 것으로 알고 있었는데, 오류가 발생해서 찾아보니 일부 DBMS에서는 length라는 이름으로 사용된다고 한다! 오류가 났을 때 참고해야 겠다.

 

Q91. 620. Not Boring Movies

1. 문제 링크: https://leetcode.com/problems/not-boring-movies/

2. 정답 코드:

SELECT *
FROM Cinema
WHERE id % 2 = 1 AND description <> 'boring'
ORDER BY rating DESC;

 

Q108. 610. Triangle Judgement

1. 문제 링크: https://leetcode.com/problems/triangle-judgement/

2. 정답 코드:

SELECT
    x,
    y,
    z,
    CASE
        WHEN x+y>z AND y+z>x AND x+z>y THEN 'Yes'
        ELSE 'No'
    END AS triangle
FROM Triangle

# 이렇게 간단히도 할 수 있음!

SELECT *, IF(x+y>z and y+z>x and z+x>y, "Yes", "No") as triangle FROM Triangle

Python 코드카타 (https://github.com/heeso0908/codekata.git)

Q6. 두 수의 합 구하기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/120802

2. 정답 코드:

def solution(num1, num2):
    answer = num1 + num2
    return answer

 

Q7. 두 수의 나눗셈

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/120806

2. 정답 코드:

def solution(num1, num2):
    answer = int(num1 / num2 * 1000)
    return answer

 

Q8. 각도기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/120829

2. 정답 코드:

def solution(angle):
    if angle >0 and angle < 90 :
        answer = 1
    elif angle == 90 :
        answer = 2
    elif angle > 90 and angle < 180 :
        answer = 3
    elif angle == 180 :
        answer = 4
    
    return answer

 

Q9. 짝수의 합

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/120831

2. 정답 코드:

def solution(n):
    answer = 0
    
    for i in range(2, n+1, 2) :
        answer += i
        
    return answer

3. 오류 상황: for 문에서 구간 설정 오류 발생

4. 시도 방법: [:n+1:2]로 했었는데, 방법 변경

5. 최종 문제 해결 방법: range(2, n+1, 2)로 변경하고 answer도 for 문 내부에서 += i를 해주기 위해 맨 처음에 answer = 0 로 초기값을 설정해 줌

 

Q10. 배열의 평균값

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/120817

2. 정답 코드:

def solution(numbers):
    answer = sum(numbers) / len(numbers)
    return answer

라이브 세션) Python 기초 강의 9일차 - 수업날 [클래스, 파일] & 미니 세션

클래스를 인스턴스화 해서 객체를 만들거다! = 클래스로 객체 만드는 과정이 인스턴스화!

클래스 = 붕어빵 틀

객체(인스턴스) = 붕어빵


클래스 안에 있는 함수 = 메서드!

우리가 평소에 사용하던 list() 이런 함수도 list가 사실은 클래스였고,

append()는 메서드,,


클래스에서 메서드 중 __iter__가 있어야 함!! (여기서 iter는 iterable : 반복 가능)

str, list, dict : 내부에 __iter__가 구현되어 있어 for 문에서 구간 반복 가능

int, float : 내부에 __iter__가 없어서 for i in 10: 이라고 쓰면 "int object is not iterable"이라는 에러 발생!


근데 self는 왜 있을까?

클래스 안에서 def 해서 메서드 만들 때 self는 무조건 넣어야 한다고 우선 생각! (예외 경우도 있지만,, 아직은,,!)

클래스 안의 많은 객체들을 어쨌든 구분을 해야할테니까 객체 각각을 구분하기 위해서 self로 만들어 줘야 함!


def __init__(self, name, age) :

여기서 __init__매직 메서드 중에서도 생성자 메서드 라고 부른다!

클래스 잘 사용하고 싶어! 하면 __init__ 내용 잘 보고 필요한거 입력해주면 된다!


Q. 매직 메서드가 뭐냐?

'매직 메서드(Magic Method)'는 이름처럼 파이썬이 특정한 상황에서 자동으로 호출해 주는 특별한 메서드를 말한다!

이름 앞뒤에 밑줄 두 개(__)가 붙어 있어서 '던더(Dunder - Double Under의 약자) 메서드'라고도 부르고, 우리가 직접 객체.메서드() 식으로 부르지 않아도, 파이썬 시스템이 알아서 불러주는 게 특징이다.

 

1. 왜 "매직"일까? (작동 원리)

우리가 평소에 하는 당연한 행동들 뒤에는 사실 매직 메서드가 숨어 있다.

  • 더하기(+)를 할 때: 1 + 1을 하면 파이썬 내부에서는 (1).__add__(1)이 실행
  • 길이(len)를 잴 때: len(my_list)를 하면 내부적으로 my_list.__len__()이 호출됨
  • 출력(print)을 할 때: print(obj)를 하면 객체의 내용을 보여주기 위해 obj.__str__()이 호출됨

즉, 평범한 기호나 함수가 클래스 객체와 만났을 때 어떻게 행동할지 정의해 놓은 약속이라고 보면 된다.

 

2. 자주 쓰는 주요 매직 메서드

매직 메서드 호출되는 시점 역할
__init__ Bread() 처럼 객체를 만들 때 생성자: 객체 초기 설정
__str__ print()로 객체를 출력할 때 설명: 객체를 문자열로 어떻게 보여줄지 결정
__len__ len(객체)를 사용할 때 길이: 객체의 길이나 개수를 반환
__iter__ for x in 객체: 를 실행할 때 반복: 반복 가능한(iterable) 객체로 만듦
__getitem__ 객체[index] 처럼 인덱싱할 때 조회: 대괄호로 값을 가져올 때 동작

 

3. 실생활 비유: 스마트폰의 버튼

스마트폰의 '전원 버튼'을 생각해보자!

  • 우리가 버튼을 누르는 건 + 기호를 쓰는 것과 같다.
  • 하지만 기계 내부에서는 버튼이 눌렸을 때 '화면을 켜라' 혹은 '종료 메뉴를 띄워라'라는 정해진 기능(__power__)이 작동됨

개발자는 이 매직 메서드를 클래스 안에 미리 정의해둠으로써, 사용자가 내 클래스를 사용할 때 +나 for문 같은 파이썬의 기본 기능을 그대로 쓸 수 있게 "마법"을 부려놓는 것!


붕어빵 구워보기 🐟🍞

class FishBread:
    # 생성자: 붕어빵이 만들어질 때 속재료와 가격을 정함
    def __init__(self, taste, price):
        self.taste = taste  # self를 통해 '이 객체'의 속성 저장
        self.price = price

    # 메서드: 붕어빵의 기능
    def describe(self):
        print(f"이 붕어빵은 {self.taste}맛이고 가격은 {self.price}원입니다.")

# 인스턴스화
bean_bread = FishBread("팥", 1000)
cream_bread = FishBread("슈크림", 1200)

bean_bread.describe() # self가 bean_bread를 가리킴

오늘은 파이썬 기초 내용 중에서도 비교적 어려운 클래스를 배웠다!

어제 파이썬 종합반 강의에서 한 번 듣고, 오늘 오전 라이브 세션에서도 다시 들었지만 여전히 이해가 쉽지 않아 추가 미니 세션까지 수강했다. 여러 번 반복해서 듣다 보니 클래스가 무엇인지에 대한 감은 조금 잡힌 것 같아 한결 후련하다.

파이썬 자체가 클래스 기반으로 이루어진 언어라는 생각도 들었고, 아직 갈 길이 멀다는 것도 다시 한 번 느꼈다.
내일은 지금까지 배웠던 내용을 전체적으로 복습하고, 금요일에 진행될 전처리 & 시각화 세션을 대비해 녹화 강의로 미리 예습을 해둬야겠다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함