[코딩 공부] 8일차(2/20)

성철민·2023년 2월 19일
0

배움

목록 보기
8/42


Schedule1. BAEKJOON

파이썬 문제 풀어보기

단계별로 풀어보기('10단계. 정렬' 도전중)


2587번. 대표값2

개요: 5개 수의 평균과 중간값 구하기

접근방법: 개수가 적으므로 선택 정렬로 정렬해보기로 했다.

정답

array = []
for _ in range(5):
    array.append(int(input()))

for i in range(5):
    min_index = i
    for j in range(i + 1, 5):
        if array[j] < array[min_index]:
            min_index = j
    array[i], array[min_index] = array[min_index], array[i]

print(int(sum(array) / 5))
print(array[2])

2587번. 대표값2

개요: N명의 응시자 중에 점수가 가장 높은 k명이 상을 받는다고 했을 때 커트라인 구하기

접근방법: 파이썬은 sorted()가 있기 때문에 sorting하고 k번째 인덱스를 출력하면 된다

정답

N, k = map(int, input().split())
students_list = list(map(int, input().split()))
print(sorted(students_list, reverse=True)[k - 1])

2751번. 수 정렬하기2

개요: N개의 수를 입력받고 N개만큼 수를 입력받는다. 그리고 이 수를 오름차순으로 정렬하는 문제

접근방법: 위 문제와 마찬가지로 sorted() 내장함수를 이용해서 정렬한다

정답

import sys
N = int(sys.stdin.readline().rstrip())
array = []
for _ in range(N):
    array.append(int(sys.stdin.readline().rstrip()))

print(*sorted(array), sep='\n')
  • input() 내장함수를 사용하니 시간초과가 되어서 sys 라이브러리의 readline()을 쓰니 풀렸다.
  • 정답 시간이 오래 걸려서 정렬 알고리즘을 이용해서 다시 풀어봐야겠다.

10989번. 수 정렬하기3

개요: 위의 문제와 비슷하나 메모리 제한이 8MB이다

접근방법: 카운팅 정렬을 이용해서 풀기로 했다

정답

import sys

# 입력 받기
N = int(sys.stdin.readline().rstrip())
array = [0] * 10001
for _ in range(N):
    array[int(sys.stdin.readline().rstrip())] += 1

for index in range(10001):
    for n in range(array[index]):
        print(index)
  • 일반적인 카운팅 정렬 알고리즘이라기 보다 수가 10,000보다 작은 자연수이므로 그만큼 리스트를 먼저 만들어주고 거기에 카운팅을 해서 작은 수부터 차례로 몇개 있는지 출력하는 방식으로 풀었다


Schedule2. 스파르타코딩클럽

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

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

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

진도

  • JavaScript
  1. 문자열.repeat() : 문자열 반복
  • Python
  1. 가상환경 라이브러리 venv 설치
  2. 설치하는 이유 : 프로젝트 별로 패키지를 관리하기 위해서
python -m venv venv
  1. 설치된 라이브러리 리스트 확인
pip list
  1. requests 라이브러리: 웹사이트에서 정보를 받아올 때 사용
  2. BeautifulSoup 라이브러리: 가져온 정보를 정제하는 데 사용
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
  1. Chrome 개발자도구의 선택자(selector)를 이용해서 가져올 수 있음
  2. soup.select_one(), soup.select()

감상
파이썬을 설치하고 간단한 웹사이트 크롤링을 해보았다.



Schedule3. Codeit(컴퓨터 과학 전공 과정)

코드잇 코딩 공부 과정

[Python] 객체 지향 프로그래밍의 4개의 기둥

Chapter4. 다형성

1, 2. 클래스 다형성

  • a클래스와 b클래스가 같은 함수를 가지고 있으면 c클래스에서 클래스를 지칭하지 않고 함수명으로 들고 올 수 있는 것 => 다형성이 있다
  • 다형성: 하나의 변수가 서로 다른 클래스의 인스턴스를 가리킬 수 있는 성질

4. 상속을 활용한 다형성Ⅰ(일반 상속)

  • 자식 클래스가 부모 클래스를 상속받도록 하고 isinstance()함수를 이용해 부모 클래스를 상속받고 있는 클래스를 구별할 수 있다
  • 부모 클래스의 함수에는 그냥 pass로 두고 자식 클래스에서 오버라이딩하도록 두면 부모 클래스를 검사용으로 쓸 수 있다.

6. 상속을 활용한 다형성Ⅲ(추상 클래스 개념)

  • 하지만 자식 클래스에서 오버라이딩을 하지 않고 인스턴스를 만드는 등 사용하면 어떻게 될까.
  • isinstance()함수를 사용해 부모 클래스를 상속받고 있는 클래스를 골라낼 수 있지만 오버라이딩을 하지 않았기 때문에 클래스를 사용 중에 오류가 날 수 있다
  • 추상 클래스(ABC, abstractmethod)
from abc import ABC, abstractmethod # Abstract Base Class
class Shapes(ABC):  # 추상 클래스
    """도형 클래스"""
    @abstractmethod
    def area(self):
        """도형의 넓이를 리턴한다: 자식 클래스가 오버라이딩할 것"""
        pass  
    @abstractmethod
    def perimeter(self):
        """도형의 둘레를 리턴한다: 자식 클래스가 오버라이딩할 것"""
        pass
  • 추상 클래스는 다른 인스턴스를 만드는 데 사용할 수 없다
  • 이제 위 코드의 Shapes 클래스를 상속 받는 자식 클래스들은 무조건 area 메소드와 perimeter 메소드를 오버라이딩 해야한다
  • 추상 메소드는 type hinting을 해줘서 어떤 자료형을 주는지 명시하는 게 좋다

11. 함수/메소드 다형성

  • 함수의 다형성: 함수를 다양한 형태로 호출하는 것
  • 메소드의 다형성: 메소드를 다양한 형태로 호출하는 것
  • 옵셔널 파라미터(Optional parameter): 기본값을 지정해준 파라미터
  • *args: 정해지지 않은 개수의 값을 튜플 형태로 받음
  • **kwargs: 정해지지 않은 개수의 값을 딕셔너리 형태로 받음

감상
클래스의 다형성에 대해서 배우고 함수, 메소드의 다형성까지 배울 수 있었다. 바로바로 쓸 수 있을 정도로 숙달되기까지 시간이 걸리겠지만 열심히 해야겠다

profile
developer

0개의 댓글