2022/06 11

프로그래머스/스택,큐/다리를 지나는 트럭

https://programmers.co.kr/learn/courses/30/lessons/42583 문제 조건 +) 문제에 빠져있는 조건이 있어 계속 틀렸다. "트럭은 1초 다리 1칸씩 전진한다"는 조건을 추가해야 한다. from collections import deque def solution(bridge_length, weight, truck_weights): answer = 0 truck_weights = deque(truck_weights) inBridge = deque([0]*bridge_length) weight_sum = 0 while truck_weights or sum(inBridge) > 0: answer += 1 getOut = inBridge.popleft() weight_sum..

algorithm/python 2022.06.21

re.split() 과 str.split() 차이

문자열을 정규식을 구분자로 하여 split 하는데 정규식 package re를 사용한 re.split()과 string 내부 메소드를 사용한 str.split() 의 결과값이 다른 이슈가 있었다. import re pattern = r',(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)' data = "\"UK/밑바닥부터 시작하는 딥러닝\",homepage,http://www.sample.co.kr" test1 = re.split(pattern, data) test2 = data.split(pattern) print(test1) print(test2) 분명 같은 정규식인데 re.split에서는 되고 str.split에서는 안된다. 이유는 당연한 거였는데 re.split 메소드는 regex pat..

language/python 2022.06.17

deque는 어떻게 빠른가

알고리즘 문제를 풀다보면 흔히 list보다 deque(double ended queue)가 훨씬 빠르다고 한다. deque의 popleft()는 배열의 첫번째 데이터를 꺼내는 것으로 O(1)의 시간복잡도가 걸린다. 그 이유가 무엇인지 궁금하여 찾아보았다. deque는 원형 큐를 확장하여 손쉽게 구현할 수 있다. 다음과 같이 초기화 가능하다. class Deque: rear = 0 front = 0 MAX_SIZE = 100 deq = list() def __init__(self): self.rear = 0 self.front = 0 self.deq = [0 for i in range(self.MAXSIZE)] 이렇게 rear, front 변수를 활용하여 linkedlist와 비슷한 방식으로 삽입, 삭제시..

algorithm/common 2022.06.15

[인스타그램 클론] 2. 프로젝트 생성 및 DB 연동

1. 프로젝트 생성 간편하게 Spring Initializr 사용 패키지는 당장 생각나는 것만 추가하고 프로젝트를 생성했다. 2. DB 연동 docker-compose로 DB들을 띄우고 spring 프로젝트의 application.yml에 DB 메타정보를 입력한다. spring: datasource: url: jdbc:mariadb://127.0.0.1:3306/instadb driver-class-name: org.mariadb.jdbc.Driver username: insta password: 1234 jpa: open-in-view: false generate-ddl: true show-sql: true hibernate: ddl-auto: create 여기서 주의사항은 Docker 컨테이너로 실행..

develop/toy project 2022.06.11

[인스타그램 클론] 1. 개발 환경 구축

docker로 개발환경을 구축한다. 필요한 스펙: ubuntu 18.04, openjdk-17, mariadb, mongodb 1. docker 및 docker-compose 설치 (참고: ubuntu18.04에 docker 설치방법) docker-compose 설치 명령어 $ sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose $ docker-compose --version Docker Compose version v2.2.3..

develop/toy project 2022.06.11

[java] map과 flatMap의 차이

면접질문으로 나왔던 map과 flatMap의 차이점을 복기한다. Java 8 에서 Optional, stream이 추가되었고 이에 사용될 수 있는 map()와 flatMap() 의 목적이 다르다. Optional에서 Map, flatMap 사용법 다음 예시는 "test"를 대문자로 변환한다. Optional s = Optional.of("test"); Assertions.assertEquals(Optional.of("TEST"), s.map(String::toUpperCase)); System.out.println(Optional.of("TEST")); //output: Optional[TEST] 더 복잡한 경우에 Optional.of() 파라미터값으로 Optional.of()가 반환되는 함수가 들어갔다..

language/java 2022.06.09