분류 전체보기 802

선형배열

배열이란? 배열이란 연관된 데이터를 하나의 변수에 그룹핑해서 관리하기 위한 방법 리스트 길이과 관계 없이 빠르게 실행 결과를 보게되는 연산들 요소 마지막에 추가 .append('삽입할 요소') 요소 마지막 혹은 지정된 인덱스에서 꺼내기 .pop('꺼낼 인덱스') 리스트의 길이에 비례해서 실행 시간이 걸리는 연산들 요소 삽입하기 '리스트명'.insert('인덱스', '삽입할 요소') 요소 삭제하기 del('리스트명['인덱스']') 리스트의 길이에 실행 시간이 비례. 오래걸리는 이유는? 리스트의 중간이 수정되어 전체 인덱스가 변경되기 때문. 추가 다른 연산 요소 탐색하기: '리스트명'.index('찾을 요소') 실습1. 리스트 L 에 정수 x를 숫자 크기에 알맞게 넣는 코드 def solution(L, x)..

정렬(sort)과 탐색(search)

정렬(sort) 복수의 요소로 주어진 데이터를 정해진 기준에 따라 새로 늘어놓는 작업 파이썬 내장 함수 sorted('리스트명') sorted('리스트명', reverse=True) 리스트에 쓸 수 있는 메서드 '리스트명'.sort() '리스트명'.sort(reverse=True) 특이점 sorted 함수는 원본에 영향을 미치지 않지만 sort 매서드는 원본에 수정을 가한다. 함수와 메소드의 차이점 함수는 독립적으로 정의되므로 이름으로만 호출이 가능하지만 메서드는 정의된 클래스에 종속되므로 ‘.’에 의해 호출해야한다. 함수가 메소드보다 더 포괄적인 의미를 가진다. 람다로 키를 지정하는 예 람다는 요소 x에 대해 : 우측에 지정된 기준으로 정렬한다 L = [ {'name': 'John', 'score': ..

자릿수 더하기

문제 설명 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다. 제한 사항 N의 범위 : 100,000,000 이하의 자연수 해결 방법 1. n을 이터러블한 문자열로 바꾼다. 2. 반복문을 통해 문자열을 리스트로 바꾼다. 3. 리스트의 요소들을 정수로 바꾼다. 4. 리스트의 요소들을 더해 합을 구한다. def solution(n): answer = sum([int(i) for i in str(n)]) return answer

파이썬 멀티 프로세싱, GIL

GIL(global interpreter lock) 한 순간에 1개의 스레드만 유지하는 락 GIL은 본질적으로 한 스레드가 다른 스레드를 차단해서 제어를 얻는 것을 막음 멀티스레딩의 위험으로부터 보호(하나의 메모리를 공유하므로 오류로 인해 전체가 다운될 수 있음) 그러므로 파이썬은 스레드로 병렬성 연산을 수행하지 못함 파이썬 멀티 스레딩은 동시성을 사용하여 io bound 코드(네트워크)에서 유용하게 사용할 수 있음 하지만 동시성은 cpu bound 코드(연산만 있는)에서 이점이 없음 해결책 멀티 프로세싱으로 병렬성을 구현하여 효율을 높일 수 있음. 단, 프로세스끼리 메모리를 공유하지 않기 때문에 직렬화 역직렬화에 소요되는 비용이 큼 비교 실험 멀티스레딩 22초 멀티프로세싱 13초 (하단 비교 코드 첨부..

2022년 4주차 '인턴십 종료'

Weekly Work 4주간의 인턴십(기업 협업)이 종료되었다. 당시에는 시간이 너무 느리다고 생각했는데, 지금에 와서는 정말 빠르게 지나갔다는 생각이 든다. 아쉬운 게 참 많은 인턴십이었다. 내 실력이 좀 더 좋았다면 더 많이 배울 수 있었을 텐데.. 그 점이 가장 아쉽다. 내가 아는 지식이 협소하니 배울 수 있는 것에도 한계가 있었다. 내가 인턴을 하며 고민한 것들은 다음과 같다. 1. Cybos API는 어떻게 사용할 수 있는가? - 대신증권 예제코드와 비공식 문서를 참고하여 사용법을 익혔다. 2. Flask는 어떻게 사용할 수 있는가? - Flask 공식 튜토리얼을 통해 사용법을 익혔다. 3. Flask안에서 아키텍처는 어떻게 구현할 수 있는가? - '깔파탄백' 책을 따라 하며 레이어 아키텍처를 ..

자연수 뒤집어 배열로 만들기

문제 설명 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 해결 방법 1. n을 이터러블한 문자열로 바꾼다. 2. 문자열의 순서를 뒤집는다. 3. 뒤집은 문자열을 모두 숫자로 바꾼다. 4. 바꾼 숫자를 리스트로 감싼다. # 컴프리핸션을 활용한 방법 def solution(n): answer = [int(i) for i in reversed(str(n))] return answer # map함수를 활용한 방법 def solution(n): answer = list(map(int, reversed(str(n)))) return answer map함수는 이..

정수 내림차순으로 배치하기

문제 설명 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 제한 조건 n은 1이상 8000000000 이하인 자연수입니다. 해결 방법 1. n을 이터러블한 str로 바꾼다 2. 내림차순이므로 역순으로 정렬한다 3. 정렬과정에서 리스트로 변경된 값을 다시 문자열로 바꾸어준다 4. 최종 값을 반환하기 위해 문자열을 숫자로 바꾸어 준다. def solution(n): return int(''.join(sorted(str(n), reverse=True)))

깨끗한 코드야말로 더 빨리 가는 유일한 방법

제목 : 클린 코드 저자 : 로버트 C. 마틴 범위 : 1장 깨끗한 코드 기억하고 싶은 것 궁극적으로 코드는 요구사항을 표현하는 언어라는 사실을 명심한다. 우리 모두는 좋은 코드가 중요하다는 사실을 안다. 왜? 오랫동안 나쁜 코드에 시달려왔으니까. 회사가 망한 원인은 바로 나쁜 코드 탓이었다. 나중에 손보겠다고 생각한 경험이 있다. (중략) 나중은 결코 오지 않는다. 나쁜 코드가 쌓일수록 팀 생산성은 떨어진다. 그러다가 마침내 0에 근접한다. 좋은 코드를 사수하는 일은 바로 우리 프로그래머들의 책임이다. 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다. 그러니까 빨리 가는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관이다. 깨끗한 코드는 한 가지를 제..

#7_술GO? 하기 전에 회GO!

결과물 사이트 주소 : http://suulgo.s3-website.ap-northeast-2.amazonaws.com/ 깃헙 레포 : https://github.com/Daco2020/27-2nd-SUULGO-backend 고민했던 것들 지난 1차 프로젝트 때 개인적으로 아쉬웠던 점들이 있었다. 노션과 트렐로 툴을 병행하여 트렐로 툴을 적극 활용하지 못한 것 트렐로를 활용하지 못하여 칸반의 진척도를 정확히 파악하지 못한 것 팀원 간 실력차에 의해 업무 공백이 발생한 것 단순 데이터 반환 기능만을 구현한 것 개성 있는 서비스가 아닌 사이트 클론과 기능에 집중한 것 이번 술고 프로젝트에서는 1차 때의 아쉬운 점들을 극복하는데 집중했다. 그래서 이번에는 첫 번째, 트렐로를 과감히 포기하고 노션에서 칸반을 함..

#6_코드말고 술잔 부딪치시는 건 어떠세요 ?

술 GO? 전 글에서 술 취향 매칭 알고리즘을 통해 가장 매칭 점수가 높은 사람들을 리스트로 받는다고 말했었다. 그리고 마음에 드는 유저를 선택하면 해당 유저의 술 취향을 볼 수 있는 상세페이지로 들어갈 수 있다. 상세페이지 화면을 보면 우측 상단에 ‘술고!’ 버튼이 보인다. 이제는 매칭을 넘어 상대방과 술 약속을 잡을 차례다. 버튼을 누르면 날짜 선택 모달 창이 뜨고, 원하는 날짜를 선택하여 실제 요청을 보낼 수 있다. 보낸 요청은 DB 테이블에 기록되는데, 이후 상대방이 확인을 할 수 있는 코드 또한 작성해두었다.(사이트에서는 아직 구현하지 못해 추후 실시간 알림이 뜰 수 있도록 리펙토링 예정) 문어발 요청은 NO! 약속 요청을 만들면서 한 가지 우려스러운 상황이 떠올랐다. 술고(술약속) 요청을 보낼..