전체 글 126

파이썬은 정말 인터프리터 언어일까?

📌파이썬 인터프리터 파이썬이 동작하는 방식은 인터프리터가 파이썬 코드를 바이트 코드로 변환한다. 바이트 코드가 PVM(Python Virtual Machine) 위에서 실행된다. 인터프리터가 파이썬 코드를 변환하고나면 .pyc 파일이 생성된다. 그런데 .pyc는 컴파일 된 파일이 아닌가? 라는 생각이 들었다. 📌자바와의 차이점 자바 코드의 실행 과정을 생각해 보았다. 자바 코드를 컴파일러(javac.exe)가 컴파일하여 .class 파일(byte code) 생성 컴파일된 .class 파일을 JVM에서 실행한다. 소스코드를 바이트 코드로 변환한 뒤 가상머신에서 실행한다는 점은 같다. 자바의 경우 컴파일러가 변환한 .class 파일이 생성된다. 이분법적으로 이것을 구분하는 것 자체가 문제라고 생각된다. 굳이..

파이썬 변수는 언제 소멸될까?

파이썬 소멸 시기 파이썬과 자바의 공통점은 메모리를 프로그래머가 관리 하지 않는다는 것이다. 메모리 관리를 대신 해주는 무언가가 존재한다는 말이다. 그 역할을 가비지 컬렉션과 레퍼런스 카운터가 맡는다. 레퍼런스 카운트는 해당 변수(객체)가 사용되고 있는 지를 나타낸다. 가비지 컬렉션는 레퍼런스 카운트가 0이 되는 순간 메모리를 수거해간다. 📌가비지 컬렉션 가비지 컬렉션 가비지 컬렉션는 레퍼런스 카운터가 0이 되는 순간 객체의 메모리를 수거해 간다. 📌레퍼런스 카운트 레퍼런스 카운트 레퍼런스의 뜻은 '참조'라는 뜻이다. 즉 레퍼런스는 해당 변수 or 객체가 참조 되고 있는지를 확인한다. 따라서 레퍼런스 카운트가 0이 되는 변수를 가비지 컬렉터가 수거해가는 것이다. 📌객체의 생성과 소멸 # Python li..

백준 1259번 : 팰린드롬이란?

📌문제 설명 팰린드롬이란? 팰린드롬이란 앞에서 읽으나 뒤에서 읽으나 똑같은 단어를 말합니다. 📌문제 접근 방식 이 문제는 입력받은 값을 문자열로 바꾼 뒤 뒤집어주기만 하면 되는 간단한 문제였습니다. 📌문제 해결 및 소스코드 import sys def solution(): while True: input_value = str(sys.stdin.readline().rstrip()) if input_value == '0': break target_value = input_value[::-1] if input_value == target_value: print("yes") else: print("no") return 0 solution()

알고리즘 2021.03.09

과적합(Overfitting) 방지하기

과적합(Overfitting) 과적합이란 모델이 학습 데이터에 대해서만 좋은 성능을 발휘하는 것을 의미합니다. 학습 데이터를 불필요할 정도로 과하게 암기하여 훈련용 데이터의 노이즈까지 학습한 상태입니다. 따라서 모델 학습 시 오버피팅을 방지하기 위한 노력이 필요합니다. 과적합을 방지하기 위한 방법은 다음과 같습니다. 1. 데이터 양 확대 데이터가 부족할 경우 오버피팅 확률이 증가하므로 데이터 양을 늘리면 데이터의 일반적인 규칙을 학습할 확률이 증가합니다. 데이터가 부족하지만 추가 수집이 어려울 경우 데이터 증강(Data Augmentation)을 통해 확장할 수 있습니다. 특히 이미지의 경우 이미지에 노이즈를 조금씩 추가하여 데이터를 증가시키는 것이 가능합니다. ex) 모의고사 문제를 전부 암기만 한 학..

맥주 추천시스템 구현 - 3. 탐색적데이터분석

탐색적데이터분석 수집한 맥주 리뷰 데이터를 관찰하며 다각도로 시각화해보았습니다. 우선 필요한 라이브러리들을 import합니다. import pandas as pd import plotly.express as px import plotly.graph_objects as go import plotly.figure_factory as ff pd.set_option('display.max_rows', 100) beer = pd.read_csv('전처리후데이터.csv', encoding='utf-8', index_col=0) beer.head(3) 살펴 볼 데이터의 개략적인 정보들입니다. beer.info() 다음은 맥주 평점에 대한 히스토그램입니다. label = ['distplot'] hist_data = [..

디자인 패턴 이해하기

1. 디자인 패턴 정의 이전 포스팅에서 객체지향특성에 대해 알아보았고, 해당 특성을 이용하며 지켜야할 5가지 원칙이 있었습니다. 그리고 객체 지향 특성들을 '도구', 객체 지향 원칙들을 '도구 사용 방법' 이라고 비유했었습니다. 👌 디자인 패턴은 '도구의 활용 방법'이라고 할 수 있습니다. 우리는 도구의 특징과 어떤 원리로 사용해야 하는지 알고 있습니다. 칼을 예로 들면, 칼은 날카롭고 뾰족한 특징이 있습니다. 그래서 칼은 무엇인가를 자르거나, 찌르는 방식으로 사용할 수 있죠. 칼은 수술을 하거나, 요리를 하거나, 동물을 사냥하는데 활용할 수 있습니다. ✨ 물론 칼로 망치질을 한다던가, 땅을 판다고해도 잡혀가지는 않습니다. 하지만 적절한 활용법은 존재합니다. 개발자들이 공통으로 겪는 '문제들에 대한 해결..

객체지향 설계원칙 이해하기

1. SOLID란? 이전 포스팅에서 객체 지향 특성에 대해 다루어 보았습니다. 캡슐화, 상속, 추상화, 다형성으로 인한 객체 지향의 장점을 이해했습니다. 그런데 '설계 5원칙'은 또 무엇일까요? 🤦‍♂️ 약자로 'SOLID'라고 써놓으니 더 어렵게 느껴지는 것 같습니다. 쉽게 말하자면 설계 5원칙이란 '객체 지향 사용법'입니다. 👀 학습한 '객체 지향 특성'이 객체 지향 프로그래밍을 위한 '도구'였다면, '객체 설계 5원칙'은 그 도구를 사용하는 '도구 사용 방법'인 것이죠. ✨ 우리는 이 5가지 원칙을 지키면서 프로그램을 작성할 것입니다. 그 프로그램은 이해하기 쉽고, 유지보수 하기 용이하며, 논리적일 가능성이 높습니다. 👏👏👏 1.1. 단일 책임 원칙(SRP) 단일 책임 원칙은 하나의 클래스는 하나의..

백준 1920번[수찾기] 문제풀이

문제 설명 📌문제 접근 방법 처음에 간단히 생각했던 방법은 '빈 리스트에 B가 A에 있으면 1, 없으면 0을 저장하자'였습니다. 1. 빈 리스트 생성 2. B가 A에 있다면 1, 없으면 0 리턴 📌1차 오답 소스코드 import sys M = int(sys.stdin.readline().rstrip()) A = list(map(int, sys.stdin.readline().rstrip().split())) N = int(sys.stdin.readline().rstrip()) B = list(map(int, sys.stdin.readline().rstrip().split())) def solution(A, B): res = [] for x in B: if x in A: res.append(1) else: ..

알고리즘 2021.03.07

백준 1181번[단어 정렬] 문제풀이

📌문제 설명 📌문제 접근 방식 1. 중복된 단어를 제거한다. 2. 글자 수로 정렬 후 알파벳 사전순으로 정렬한다. 📌몰랐던 점 sorting 기준을 lambda식으로 정의할 때 2가지 기준을 설정할 것 중복된 단어를 제거하는 건 set 자료구조를 사용해 간단히 해결할 수 있었다. 2단계에서 글자 수로 정렬하는 것도 문제없이 수행했으나 알파벳 사전순으로 정렬하는 과정에서 헷갈렸던 부분은 문자열 정렬을 어떻게 할 것인가였다. lambda 식을 이용해 정렬할 때 2개의 기준을 주고 싶었는데 문법이 기억나지 않았다. 그래서 직접 문자열 정렬을 하는 함수로 구현하다보니 시간이 오래걸렸다. sort함수의 key파라미터로 lambda 식을 넘겨줄 때 글자수와 문자열을 설정하면 간단한 문제였다. 📌소스코드 import..

알고리즘 2021.03.06

Visualization 코로나 데이터 분석하기

📌First Topic 코로나 종식? 줄어든 관심, 그러나 늘어나는 해외발 확진자 https://dacon.io/competitions/official/235590/codeshare/934?page=1&dtype=recent&ptype=personal 📌Second Topic "인구"관점 시각화 업데이트 https://dacon.io/competitions/official/235590/codeshare/959 📌Third Topic 코로나 정책은 과연 효과가 있었을까? https://dacon.io/competitions/official/235590/codeshare/1003 by Team Signal-9