반응형

파이썬 68

파이썬으로 AWS S3에 있는 파일 GET, PUT하기

안녕하세요 Dibrary입니다. 저번에 만든 AWS S3에 파이썬을 사용해서 파일을 넣고, 꺼내보겠습니다. 이번에 할 파일은 CSV파일로 간단히 해 볼건데, 주의할 점은 각 행마다 column갯수가 같아야 합니다. 즉, 각 행마다 콤마 갯수가 같아야 하는 것이죠. 다르면 어떻게 되냐구요? 이런 tokenizing data 에러를 마주할 수 있습니다. 파이썬으로 AWS를 연동하고 싶으면 boto3 모듈을 설치해야 합니다. 찾아보니 boto3는 AWS를 사용하게 해 주는 SDK라고 합니다. 그리고 aws_access_key_id와 aws_secret_access_key를 가지고 있어야 하는데, 이는 보안이 굉장히 중요하므로 별도로 저는 만들어서 사용했습니다. 위 코드에서 제것의 값은 가렸습니다. 해당 함수를..

[파이썬 클린코드] 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번이 가장 골치아팠었습니다. 점 갯수를 따지자니, 전체 갯..

[BOJ][2108번] 통계학

안녕하세요 Dibrary입니다. 이번에는 시간초과때문에 온갖 머리를 쥐어짰던 문제를 정리해보고자 합니다. 어휴 =_=;; (뭐 덕분에 Counter를 알게 되었으니까 다행이죠) 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 문제는 간단합니다. 그저 평균, 중앙값, 최빈값, 범위 만 구하면 됩니다. 그 와중에 혹시라도 시간초과 걸릴까봐 (너무 쉬운거 같은 문제는 꼭 이런게 걸려있곤 해서 말이죠) 미리 아이디어를 좀 짰었습니다. 값 받으면서 미리 정할 수 있는게 뭐 없을까? 최대값, 최소값은 값을 받으면서 미리 확인해 나갈 ..

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

안녕하세요 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개는 안되겠지만 이런..

반응형