반응형

Python3 47

[파이썬 클린코드] 1장 (코드 포매팅과 도구) 정리

안녕하세요 Dibrary입니다. 아래 내용은 파이썬 클린코드의 1장 중에 핵심 내용만을 정리한 것입니다. 프로그래밍 언어의 진정한 의미는 아이디어를 다른 개발자에게 전달하는 것이다. 코드를 클린한 상태로 만들면 유지보수성 향상, 기술부채 감소, 민첩한 개발, 지속적인 배포등 여러 장점들이 있다. 클린코드는 품질 좋은 소프트웨어를 개발하고, 견고하고 유지보수가 쉬운 시스템을 만들고, 기술 부채를 회피하는 것을 말한다. 좋은 코드 레이아웃에서 가장 필요한 특성은 일관성. 파이썬이 따라야 하는 코딩 스타일은 PEP-8이다. PEP 8 – Style Guide for Python Code | peps.python.org PEP 8 – Style Guide for Python Code Author: Guido v..

[BOJ][3063번] 게시판

안녕하세요 Dibrary입니다. 이번 문제도 시간초과로 꽤나 애먹었던 문제입니다. 3063번: 게시판 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄에 8개의 정수 x1, y1, x2, y2, x3, y3, x4, y4가 주어진다. 상원이 처음 붙인 포스터의 두 꼭짓점의 좌표 (x1, y1), (x2, y2)와 www.acmicpc.net 위 문제는 처음에 어떻게 시도했냐면, x1과 x2범위에서 x3과 x4의 위치를 뺐습니다. 그런방법으로 계산했는데, 이는 크나큰 문제가 있죠. x3이 반드시 x1과 x2보다 크다는 법은 없다. y3도 마찬가지. 그리고 점의 갯수로 따져버리면 원하는 갯수를 셀 수 없다. 이 중에 3번이 가장 골치아팠었습니다. 점 갯수를 따지자니, 전체 갯..

파이썬에서 쓰이는 비트연산

안녕하세요 Dibrary입니다. 이번에는 비트연산자를 사용하는 방법에 대해 정리해보겠습니다. 입력 정수에 대해서 2진수로 바꾸려면 for문을 돌면서 나눈 나머지를 합하는 방법도 있습니다만, 파이썬은 쉬운 방법을 가지고 있습니다. 123이라는 입력 변수를 bin으로 확인하면 2진수 숫자가 나옵니다. 해당 자료형은 '문자열'입니다. 2진수 숫자 '문자열'을 다시 int에 넣고 2진수임을 알려주면 원래 10진수 숫자가 나옵니다. 그럼 n진수로 된 숫자는 int만 쓰면 다시 원래대로 바꿀 수 있을까요? 저도 궁금해서 for문으로 확인해보았습니다. 되는 경우도 있고, 안 되는 경우도 있는데, 36 이후부터는 다 안됩니다. 알고리즘 문제를 풀다 보면 2진수, 3진수, 8진수, 16진수 정도가 가장 많이 나올텐데, ..

파이썬에서 빈번하게 마주하는 몇 가지 편하게 하는 방법

안녕하세요 Dibrary입니다. 이번에는 알고리즘을 풀다 빈번하게 마주하는 방법을 몇 가지 정리해보고자 합니다. 정말 사소한건데, 코드가 꽤나 길어지면 이 부분에서 시간 잡아먹힐땐 아주 아깝다는 생각이 들곤 하죠. 알고리즘을 꽤나 많이 풀어 보신 분들이야 익숙할 수 있는데, 저같이 몰라서 산전수전 다 찾아보고 뒤져봐야 하는 입장에서는 ... ㅠ.ㅜ 1. 단일 index로 가져오는 방법과 슬라이싱이 가능하다면 슬라이싱을 쓰자. 무슨말이냐면 코드를 먼저 보여드리겠습니다. 10개의 값이 있는 리스트에 [ : ] 꼴의 슬라이싱을 쓰면 범위를 벗어나더라도 '에러'가 나지 않습니다. 그러나, index로 가져올 때는 범위 밖에 있으면 '에러'가 납니다. index로 값을 가져오는 코드를 작성하다가 이 에러를 마주해..

알고리즘 2022.08.30

[BOJ][1236번] 성 지키기

안녕하세요 Dibrary입니다. 문제를 풀 때 알고리즘을 잘 알고 있는 것도 중요하지만, 아이디어의 중요성? 을 다시 한 번 깨닫게 된 문제가 있어서 가져와봤습니다. 1236번: 성 지키기 첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 성의 상태가 주어진다. 성의 상태는 .은 빈칸, X는 경비원이 있는 칸이다 www.acmicpc.net 딱 보면 엄청 간단해 보이죠. 네 알고리즘 풀이에 어느정도 익숙한 분이라면 바로 풀 아이디어가 떠오르실 겁니다. (전 아니지만요... ㅠ.ㅜ) 제가 생각한 아이디어는 아래와 같습니다. 모든 점을 지나면서 행과 열을 확인하고, 둘 중에 X가 하나도 없는 지점에서 X를 추가한다. 모든 점을 ..

알고리즘 2022.08.26

[디자인 패턴] 팩토리 메서드 패턴

안녕하세요 Dibrary입니다. 이번에는 디자인 패턴 중에 '팩토리 메서드 패턴'을 정리해보겠습니다. 단어에 '팩토리'라는 뜻은 말 그대로 factory 즉, '공장'이죠. 공장은 뭐하는 곳이지 아시죠? 주로 물건을 생산하죠. 이름을 보면 생산의 대상이 메서드인 것처럼 보입니다. 팩토리 메서드 패턴은 인터페이스는 부모클래스에서 정하지만 구체적인 객체 생성은 자식클래스에서 생성하는 것입니다. 즉, 객체 생성 처리를 서브클래스로 분리해서 처리하게 하는 것이죠. 제가 느낀 바로는 결국 초반 인터페이스는 코드가 여러 개로 쓰이지 않고, 하나로 작성한 후에 실질적으로 다형성이 필요한 부분에서 자식 클래스를 어떤 것을 선택하느냐에 따라 다른 결과를 내보이는 것으로 생각했습니다. 많이 드는 피자집 예시를 보겠습니다...

파이썬으로 정규표현식 다뤄보기 - 1

안녕하세요 Dibrary입니다. 알고리즘이나 데이터 로그를 확인할 때 가장 많이 접하는 것이 '문자열' 자료형인데요 이 문자열을 일일이 슬라이싱가지고 하면 생각보다 코드가 지저분해지거나 길어지는 경우가 많습니다. 이럴 때, 정규표현식을 써서 간단하게 할 수가 있는데 문제는 정규표현식은 '공부'를 좀 해야 한다는 것이죠.. (물론 해도 좀 까먹....) 암튼, 제가 간단하게 써먹기 편하다고 느낀것을 정리해보겠습니다. 1. match('패턴', '대상문자열') match는 패턴으로 대상문자열을 비교해봅니다. 다만, 반드시 첫 번째부터 확인합니다. 이게 왜 중요하냐면, 곧 설명할 search와 굉장히 다른 결과를 내기 때문입니다. 첫 번째는 a가 hello에 있는지 맨 앞부터 비교하는데, a와 h는 다르기 때..

[BOJ][2018번] 수들의 합 5

안녕하세요 Dibrary입니다. 이번에는 흔히 '투 포인터' 를 써서 풀어야 하는 문제를 정리해보겠습니다. 이번 문제는 단순히 합을 구하는 것입니다. 2018번: 수들의 합 5 어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한 www.acmicpc.net 우선 이 문제를 처음 보았을 때, '투 포인터'라는 개념 자체도 몰랐었습니다. 그래서, 가장 먼저 떠오른 생각은 '완전 탐색'이었죠. 문제는, N이 1000만까지 주어질 수 있는데, 그러면 1개씩 전부 끝까지 진행해보고, 2개씩 전부 끝까지 진행해보고, 3개씩 ... N-1개는 안되겠지만 이런..

Python을 이용해서 HDFS의 파일 읽어오기

안녕하세요 Dibrary입니다. 이번에는 제가 하둡 클러스터에 올린 파일을 파이썬으로 읽어보겠습니다. 참고로 사용하실 파이썬에는 미리 hdfs 라이브러리가 있어야 하므로 pip install hdfs 를 해 주세요. 제가 사용한 hdfs 버전은 2.7.0 이네요. 해당 라이브러리를 더 상세하게 익히고 사용하고자 하는 분들은 아래 사이트를 참고해주세요. API reference — HdfsCLI 2.5.8 documentation Parameters: url – Hostname or IP address of HDFS namenode, prefixed with protocol, followed by WebHDFS port on namenode. mutual_auth – Whether to enforce mu..

[BOJ][12891번] DNA 비밀번호

안녕하세요 Dibrary입니다. 이번에는 백준의 12891번 문제를 통해 '슬라이딩 윈도우'방법을 알아보겠습니다. 12891번: DNA 비밀번호 평소에 문자열을 가지고 노는 것을 좋아하는 민호는 DNA 문자열을 알게 되었다. DNA 문자열은 모든 문자열에 등장하는 문자가 {‘A’, ‘C’, ‘G’, ‘T’} 인 문자열을 말한다. 예를 들어 “ACKA” www.acmicpc.net 위 문제는 사실 모든 경우의 수를 따져보아도 구할 수 있습니다. 문제는, 주어진 문자열의 길이가 100만까지 가능하니까 해당 방법은 쓸 수 없다는 것이죠. 그러면 '모든 경우의 수를 따지지 않아도 될까?' 라는 생각이 떠오르실텐데, 네. 가능합니다. 문제에 이런 조건이 있기 때문이죠, 위 예시를 통해 뽑을 때, 항상 '순서대로 ..

반응형