백준 알고리즘 1181 : 단어 정렬(Python3)

1181번: 단어 정렬 이 문제를 보고 떠오른 생각은 이전에 사용하려고 했던 방식인 문자를 아스키코드로 변환하여 숫자로 저장한 다음 숫자로 정렬할 생각이었다. 그래서 구현한 함수가 아래와 같다. 1 2 3 4 5 6 7 def trans_string_to_number(m_string): result = 0 weight = 2 ** len(m_string) for x in m_string: result += (ord(x)...

Pythonic이란 무엇인가?

파이써닉(Pythonic) 파이썬스러운 코드라는 의미. 아주 잘 짜여진 Python 코드를 Pythonic 하다고 부른다. 파이썬스러운 코드라? 파이썬은 무엇보다 읽기 쉽고 가독성이 높은 것을 추구한다. 파이썬에선 가독성이 높은 코드를 작성하기 위해 파이써니스타(파이썬 베테랑)들이 가이드라인을 제시하고 있고 이러한 가이드라인을 잘 따르는 코드가 파이썬스러운 코드다. Hitchhiker’s Guide to Python / PEP 8 위 홈페이지를 둘러보면...

파이썬으로 파일 변경 실시간 감지

자바 스프링 프로젝트를 리눅스에서 진행하고자 하였다. 전제 조건은 이클립스 혹은 STS를 전혀 활용하지 않는 것이다. 대충 스프링을 빌드하고 실행시키는 방법에 대해서 알았지만 이클립스처럼 편하지 않았다. 이를 자동화하기 위해서 처음에는 CRON 탭을 이용하여 매 분마다 지속적인 빌드를 실시했지만 아래와 같은 단점이 있다. 매 분 10초 동안은 404를 보거나 느린 반응속도를 보인다....

[5초꿀팁] 파이썬 패키지 관리

파이썬 패키지 관리 팁 일반적으로 파이썬 프로젝트에서는 requirements.txt에 사용하는 패키지명들을 기록해둔다. requirements.txt에 의존 패키지들을 기록해두면 프로젝트 소스코드를 새로 받았거나 의존 패키지 버전에 변화가 있을 때 다음 명령어로 간단하게 설치할 수 있다. 1 (venv)$ pip install -U -r requirements.txt 현재 설치된 패키지들을 모두 requirements.txt에 기록하려면 다음 명령을 사용하면 된다. 1 (venv)$...

파이썬으로 구현한 알고리즘 - 정렬

자료구조를 확실히 공부했더니 이전에는 이해되지 않았던 히프정렬이나 트리정렬에 대해서 정확하게 이해할 수 있었다. 구현하는 것도 재밌었고 새로운 알고리즘(유전정렬)을 고안해 보기도 하였다 :) 버블 정렬(Bubble Sort) 인접한 원소를 두 개 비교하여 자리를 교환하는 방식이다. 처음부터 마지막까지 원소를 비교하여 마지막에는 가장 (큰 또는 작은) 원소가 배치된다. 이를 정렬이 끝날때까지 수행하며 시간 복잡도는...

파이썬으로 구현한 자료구조(4) - 트리

트리(Tree) 리스트나 스택 또는 큐로 가계도나 조직도를 구현할 수 있을까요? 선형 자료구조로 계층형 구조를 표현하기 어렵습니다. 이처럼 계층형 구조를 가진 문제를 해결하기 위한 자료구조 형태가 트리입니다. 트리의 구조를 일정하게 제한하여 정의하면 트리의 연산이 단순하고 명확해진다. 전체 트리의 차수가 2 이하가 되도록 정의한 것이 이진 트리이다. 이 글에서 구현된 트리의 종류는...

파이썬으로 구현한 자료구조(3) - 큐, 데크

큐(Queue) 은행에서는 먼저 기다린 손님을 우선으로 일을 처리해 줍니다. 이처럼 삽입 순서와 삭제 순서가 일치하도록 하는 자료구조를 큐라고 합니다. 앞서 익혔던 스택의 경우에는 늦게 들어온게 가장 먼저 나가는 방식인 LIFO 였으나 큐의 경우에는 스택과 다르게 선입선출, FIFO(First In First Out) 방식을 사용한다. 우리의 법치국가 사회에서 가장 많이 볼 수 있는...

파이썬으로 구현한 자료구조(2) - 스택

스택… 지난번에 백준에서 현욱은 괄호왕이야!!!문제를 풀려고 했을때 지금 나올 스택을 활용하여 해결하고자 했으나, 역시 응용이 안됐다. 기본기의 부족때문일까… 스택 미로에서 길을 찾는 문제와 같이 삽입 순서와 삭제 순서를 역순으로 하여 풀어야 하는 문제들이 있는데, 이럴때 쓰는 자료 구조가 스택입니다. 스택의 예로는 대부분 팬케이크와 연탄에 빗대어 표현하곤 한다. 팬케이크는 아래로부터 차곡차곡...

파이썬으로 구현한 자료구조(1) - 연결 리스트

이번에 코딩 테스트를 하면서 지금 내게 부족하다고 판단된건 자료구조의 대한 무지라고 생각된다. 어떤 문제를 보면 어떤 자료구조를 이용할지 떠오르지만 막상 적용하는데 어려움이 있다보니 결국 for문 부터 적게된다. 이번에 파이썬을 활용해서 연결리스트, 스택, 큐, 트리, 그래프와 같은 기본적인 자료구조를 구현해 볼 생각이다. 이번건 절대로 작심삼일로 끝나지 않을 것이다! 연결 리스트 연속된...

파이썬 그래프 그리기 matplotlib

그래프는 생각보다 사용할 일이 다분한 것 같다. 필자가 진행하고 있는 프로젝트에도 필요하여 사용법을 찾아 보았다. 결과를 실시간으로 그려보고 싶었지만 스레딩이 필요한지 안되는 관계로 출력된 파일에서 필요한 부분만 잘라서 그래프로 그려보고자 하였다. 설치(우분투) 1 2 sudo apt-get install python-matplotlib sudo apt-get install python3-matplotlib 자신에 버전에 맞는 파이썬으로 위 명령어를 통해서 설치해...

파이썬(Python) Tkinter을 이용한 GUI 프로그래밍

파이썬에서 GUI 프로그래밍을 하기 위해선 PyQt 혹은 Tkinter을 이용하여 구현할 수 있다. 하지만 PyQt는 Qt를 별도로 설치하여야 하는 불편함이 있다. 라즈베리파이에서 간단하게 구현하기 위해서 Tkinter을 선택했다. 우분투에서 패키지 설치 라즈베리파이에는 기본적으로 깔려있는 듯하지만 우분투에서는 기본적으로 깔려있지 않았다. 설치하는 방법은 다음과 같다. 파이썬2와 파이썬3를 각각 설치해야 한다. 1 2 3 sudo...

파이썬(Python) - 유전 알고리즘 - 가방 채우기 2

어제 만든 가방 채우기는 물건이 같은 부피의 같은 가치가 있는 물건이 끝없이 나열되어있고 가방에 크기에 알맞게 넣는 알고리즘이었다. 이번에는 중복없이 한개씩 제공되는 물건중에 무엇을 챙겨야 할 지 결정하는 알고리즘이다. (원래는 이게 목적이었는데 어제 중요한걸 빼먹어 버렸다.) 예로들어 어디론가 놀러 가거나 급박한 상황이 발생했을때 물건에 다음과 같이 부피와 가치를 지정할 수...

파이썬(Python) - 유전 알고리즘 - 가방 채우기 1

유전 알고리즘을 만들때 가장 먼저 해야할 일은 항상 evoluation 함수를 만드는 것이며 evaoluation 함수는 추악한 오리와 아름다운 백조를 분리하는 작업이다. 저번에 만들었던 소스코드는 굉장히 간단한 내용이었기에 큰 어려움이 없었다. 조금더 유전 알고리즘에 익숙해지기 위해서 새로운 소스코드를 작성하고자 한다. Project2. 배낭에 가장 효율적인 물건 채우기 가방의 공간은 10으로 한정 각 물건의...

파이썬(Python) - 유전 알고리즘 - 기본

이 블로그에서 이론을 참고했다. 책에 나와있는 것과 유사한 내용인데 좀 더 정리가 잘 된 내용인 것 같다. 간단하게 정리하면 이렇다. 용어 염색체 : 유전 정보를 담은 문자열 유전자 : 문자열의 유전 정보 교차 : 두 개의 염색체를 조합 돌연변이 : 확률적으로 유전자의 정보가 바뀜 자손 : 교차와 돌연변이로 생성된 염색체...

백준 알고리즘 16738 : 초특가 숭놀자(Python3)

하… 런타임 에러가 왜 발생하는 거냐 도대체… Python3로 제출을 했던건 그래 내 잘못이 맞아. 하지만 Python2에서 런타임 에러는 좀 아니지; 백준을 하면 할수록 자괴감이 들지만 언젠간…나아지겠지 싶다. 아니 나아져야 한다. 일단 터미널에서 파이썬을 실행시켰을 땐 정말 멀정하게 동작한다. 아마 런타임 에러가 아니었어도 분명 예외는 어딘가 있었겠지만 일단 런타임 에러만 좀...

텐서플로우(Tensor Flow) XOR 코드 분석

글씨가 왜 이렇게 자꾸 기울어 지는지... 핵심 소스 1 2 3 4 5 6 7 8 9 10 11 # 크기가 정해지지 않은(None), 2개의 입력값을 받는(placeholder) 변수 X = tf.placeholder(tf.float32, [None, 2]) #그래프를 계산하면서 최적화할(Variable), 0에 가까운 난수(truncate_normal) w1 = tf.Variable(tf.truncate_normal([2, 4])) # mat는 행렬을 의미하고 mul은 곱셈을 의미한다. A1...

파이썬(Python) 단층 퍼셉트론(AND, OR) 프로그래밍

한동안 나를 우울하게 만들었던 인공신경망 퍼셉트론을 이용한 AND, OR 연산의 결과를 만들어내는 소스코드를 드디어 작성했다. 사실 나중에 다시 보면 내가 왜 이걸 짜면서 자괴감에 빠졌나 생각이 들면서 부끄러워 질지도 모르겠다. 하지만 이것 때문에 우울했던건 사실이고 난 해결을 했다는 사실이 기쁠 뿐 이다. 뭐든지 해낼 수 있을 것 같다. 식을 뜨문뜨문...

백준 알고리즘 1152 : 단어의 개수(Python2)

[백준 알고리즘] 1152 : 단어의 개수 예시 입력 :  The Curious Case of Benjamin Button 예시 출력 : 6 문제를 간단히 해석하면 이렇다. 띄어쓰기로 구분된 단어의 갯수를 파악해서 출력하라. 내 생각으로는 굉장히 쉬운문제라 생각했는데 생각보다 정답률이 낮았다(22%) 예전에 같은 생각으로 시도했던 문제였는데 최근에야 다시 풀어보았다. 파이썬으로 풀면 굉장히 간단할 것 같았다. 작성된...

파이썬(Python) 한 줄에 여러개 정수 입력 받는 방법

대부분 코딩 테스트의 문제는 한 줄에 여러개의 정수를 입력받는 부분이 많은데 다양한 방법으로 구현할 수 있다. 필자가 생각한 건 4가지 정도? 구석기 1 2 3 x = input().split() a = int(x[0]) b = int(x[1]) 가장 기초적이고 원시적인 방법이다. x를 split된 배열로 받고 각 배열을 int로 형변환하여 변수에 넣는다. 간석기 1...