해당 글은 Yang Zhou님의 5 Best Practices of Destructuring Assignments in Python 를 번역하였습니다. 변수에 value(값) 을 저장하는 방법은 프로그래밍의 기본 소양입니다. 어떤 프로그래밍 언어들 중에서도 특히나 파이썬의 경우 이러한 과정을 더욱 우아하게 처리할 수 있는 방법이 있죠. 예시를 한번 보도록 합시다. a, *mid, b = [1, 2, 3, 4, 5, 6] print(a, mid, b) # 1 [2, 3, 4, 5] 6 위의 코드와 같이 * 을 통해 가운데의 mid 변수는 가운데 요소들(2,3,4,5)을 리스트로 받은 것을 확인할 수 있습니다. 이러한 방식이 파이썬에서의 구조분해 할당을 받는 방법 중 하나입니다. 해당 문서는 파이썬에서의 주..
전체 글
무슨 생각을 해.. 그냥 하는거지아 더럽다... 내 코드 진짜 더러워.... 어떻게 하지? 마감일에 쫓겨서 코드를 만든 후 시간을 갖고서 내 코드를 들여다보면 이보다 더 더러울 수가 없다. 같은 기능을 동작하는 코드가 여러군데에 분포되어 있고, 한 함수에 왜 이렇게 많은 기능을 때려넣은거냐 이제 가급적 그러지 말자! DRY (Don't Repeat Yourself) 특정한 지식, 의도, 로직, 비즈니스 등이 다양한 곳에서 다양한 형태로 계속 반복되는 것을 피하자의 원칙 시스템 내 특정 지식과 로직은 단 한 곳에서 명확하고 신뢰성 있게 나타나야 한다. 여러 모듈에 걸쳐 동일한 로직을 반복적으로 작성할 경우 로직의 변경사항이 발생할 경우 반복적 업데이트 뿐 아니라 실수가 잦아 유지보수의 악몽이 나타난다. 재사용성이 높기에 유지보수성도 높다..
개발하다보면 경도와 위도가 헷갈릴 수 있다.. 허허 그럴 수 있다..없나...? 우리나라의 경우 다음과 같이 대충 경도로는 126 ~ 127, 위도로는 35 ~ 37 정도로 나올 것이다. wkt string의 경우 표준을 따르는데 Point를 기준으로 할 때 POINT (x y z) 로 표현된다. 이때 x는 Longitude(경도), y는 Latitude(위도), z는 Altitude(고도) 를 의미한다. 다시 말해 POINT (경도 위도 고도) 순으로 되어야 한다. POINT(위도 경도 고도) 처럼 순서가 바뀌지 않도록 주의해야 한다. 그런데.. 이미 디비에 실수로 POINT(위도 경도 고도) 로 INSERT를 해버렸다면..? 그래서 X랑 Y를..즉 경도와 위도의 값을 뒤바뀌게 해주고싶다면? PostG..
LeetHub를 사용하려고 리파지토리를 지정하고 푸시했더니 풀이랑 문제가 냅다 root에 저장돼버렸다. 난 LeetCode라는 폴더 내에 난이도 별로 문제가 저장될 줄 알았는데...(백준허브는 그렇게 해주잖아요..) 그렇다고 LeetCode용 리파지토리를 따로 파기는 싫었다. 내가 원래 쓰던 Algorithm 리파지토리 에 그대로 LeetCode를 업로드할 순 없을까 보던 중... 이미 누군가 멋진 분 이 해놓으신 것을 보고 따라했다. LeetCode 폴더에 난이도별로 따로 업로드 하는 방법 https://github.com/QasimWani/LeetHub 를 내 로컬에 클론해서 가져온다. 1을 클론해왔다면 해당 위치에서 다음을 실행하자. npm run setup npm run format npm run..
DP Dynamic Programming, 동적 프로그래밍 메모이제이션을 이용하여 문제를 푼다 메모이제이션 다음 상태를 저장하고, 사용하기 DP.. 난이도는 천차만별이고 처음에는 무엇을 어떻게 저장해서 써야할 지 몰라서 헤맬 수 있다 함 피보나치, Knapsack .....(피보나치가 두개가 아닌 세개거나, 지문이 너무 길어서 knapsack인지 모르거나..) 많이 풀고 생각 연습을 하는 것이 중요 푸는 순서 상태를 정의한다. 점화식을 찾는다. (구한다) 시간 복잡도를 계산한다. dp로 푸는 경우 시간복잡도가 다양할 수 있음 1차원 배열에서 쭉 도는 O(N), 2차원 배열에서 쭉 도는 O(N^2), O(N^3)... 코테에서 삼차원 배열 이상은 잘 안나온다 함. 2차원, 3차원에서 가장 많이 나온다. 반..
알고리즘 문제에서 소수를 찾으려는데 시간 복잡도에서 걸렸다. 처음 사용한 소수찾는 함수는 다음과 같다. def get_sosu(num): if num == 1: return 0 for i in range(2, num): if num % i == 0: return 0 return 1 소수는 1과 자기 자신을 제외한 숫자 외에는 약수가 될 수 없다. 다음과 같은 코드를 통해 2에서부터 자기 자신까지 모두 나눴을 때 나머지가 0이 되면 소수가 아니며, 0이 한번도 나오지 않는다면 소수이다. (완전탐색 방법이다. 시간복잡도는 슬퍼지겠다) 시간복잡도는 O(n) 이 되려나.. 아무튼 구하려는 숫자가 커질 수록 시간이 그만큼 늘어나게 되므로 비효율적이다. 소수를 찾는데 가장 효율적인 알고리즘은 에라토스테네스의 체 이..
Promise 콜백 헬 이라 불리는 지저분한 JS 코드의 해결책 내용이 실행은 되었지만 결과를 아직 반환하지 않은 객체 then을 붙이면 결과를 반환함 실행이 완료되지 않았으면 완료된 후에 then 내부 함수가 실행됨 Resolve(성공리턴값) => then으로 연결 Reject(실패리턴값) => catch로 연결 Finally 부분은 무조건 실행 const condition = true; // true면 resolve, false면 reject const promise = new Promise((resolve, reject) => { if (condition) { resolve('성공'); } else { reject('실패'); } }); // 다른 코드가 들어갈 수 있다. promise .then(..
이게 뭔데요? key와 value를 저장하는 데이터 구조 key를 통해 바로 데이터를 받아올 수 있기 때문에 속도가 획기적으로 빨라짐 파이썬에서는 Dictionary 가 해시 테이블로 구현되어 있음 빠른 접근과 탐색이 필요할 때 사용하기 좋다 (일단 딕셔너리에 사용되는 함수 대부분의 시간복잡도는 O(1)) 딕셔너리 형태 값 초기화 (빨간 줄은 mypy 설정으로 인한 에러이다. 따라서 result: dict[str, int] = collections.defaultdict(int) 로 해줘도 무관) 위와 같이 collections.defaultdict(디폴트로 설정할 값의 자료형) 을 넣으면 해당 키의 value를 넣기도 전에 설정한 자료형으로 초기화됨 참고문제 참고 https://www.fun-coding..
https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 코드 from sys import stdin import sys input = stdin.readline sys.setrecursionlimit(10000000) region = [] # region은 전역으로 visit = [] dx, dy = [1, -1, 0, 0], [0, 0, 1, -1] def solution(): global region,visit # 1. 입력정보 받기 N = int(inp..
쓰기 편한 것 dx = [-1, 1, 0, 0] dy = [0, 0, 1, -1] 반시계 방향 dx = [0, -1, 0, 1] dy = [1, 0, -1, 0] 시계 방향 dx = [0, 1, 0, -1] dy = [1, 0, -1, 0]
호이스팅 변수 호이스팅 다음과 같이 코드를 짰다고 가정해보자. function doSomething(){ var a = 10; console.log(a); // 10 console.log(b); // undefined var b = 100; } doSomething(); 자바스크립트에서 변수를 선언하면 변수선언부가 최상단으로 올라가게 된다. function doSomething(){ var a = 10; var b; console.log(a); // 10 console.log(b); // undefined b = 100; } doSomething(); 변수의 경우 사실 호이스팅이 큰 문제가 되지 않는다. 그러나... 함수 호이스팅 변수 호이스팅과 유사하나.. 자바스크립트에는 함수를 선언하는 방식이 두 가..
Reference 타입 Datevar date = new Date(); console.log(date) 자바스크립트의 사용시간대와 우리나라 사용시간대는 다름에 주의 날짜를 다루는 객체이기에 날짜 관련 내부 기능이 많이 있음 문제는 자바스크립트에서 이 date를 사용하는 방법이 비효율적이다. 따라서 자바스크립트에서 날짜 관련 기능을 만들 때에는 Date를 바로 쓰기 보다 moment 나 Luxon 을 사용하는 것이 좋다. 자바스크립트 기본 Date는 문제가 많은 듯 하다. 여기서도 지적을 한다. Regexp(Regular Expression)var reg1 = /abc/; // 리터럴 표기법 var reg2 = new RegExp("/abc/", "g"); // 객체방식 리터럴 표기법의 장점은 다음과같이 ..