전체 글
-
[Python] 프로그래머스 : 문자열 압축 (구현, 완전탐색)Algorithm 2022. 5. 20. 23:40
[2020 카카오 블라인드 채용] https://programmers.co.kr/learn/courses/30/lessons/60057 머리말 딱 구현 문제라고 느껴져 문제를 잘 해석하려고 노력하였다. 하지만, 문자열은 제일 앞부터 정해진 길이만큼 잘라야 합니다. 이 문장을 과소평가하여 첫 제출 때 틀렸다. 그리고 올바르게 짠 것 같은데 자꾸 72점이 나와 다른 사람의 코드를 참고할까 하다가 끝까지 디버깅하여 결국 풀어냈다. 코드 의식의 흐름대로 작성하여 코드가 난잡합니다 🤢 def solution(s): answer = [len(s)] for cut in range(1, len(s) // 2 + 1): # 자를 수 있는 범위 (최소 2개 최대 절반개) substrIdx = 0 cutstr = '' # ..
-
[Python] 백준 2357 : 최솟값과 최댓값 (세그먼트 트리)Algorithm 2022. 5. 10. 23:15
https://www.acmicpc.net/problem/2357 머리말 solved 통계를 보니 자료구조 관련 데이터가 별로 없길레 관련 문제 중에 랜덤으로 하나를 골랐다. 문제 자체는 굉장히 평이해보였지만 n, m 범위가 1 이상 10만 이하 라는 점에서 아,, 이거 뭔가 트리 써야할 것 같은데? 라는 생각이 들었다. 어떤 트리 써야할 지 몰라 알고리즘 분류를 보니 세그먼트 트리 문제라고 한다. 세그먼트 트리 백준 블로그에 상세한 설명이 적혀있다. 세그먼트 트리는 어떠한 구간 내의 로직을 처리할 때 굉장히 효율적인 알고리즘이다. 트리의 노드에 범위라는 개념이 들어가고, 저장할 데이터는 로직에 따라 다르겠지만 이 문제에서는 해당 구간의 최솟값, 최댓값을 저장한다. 리프 노드(idx)라면 idx ~ id..
-
[Python] 백준 1162 : 도로포장 (다익스트라, DP)Algorithm 2022. 5. 10. 15:07
https://www.acmicpc.net/problem/1162 머리말 오랜만에 9시에 일어나서 백준 문제를 풀어봤다. 일찍 일어난거 맞지..? 어떤 문제를 풀지 고민하다가 최근 수업시간에 다루었던 다익스트라 문제를 골랐다. 1시간 30분 고민해서 풀었다가 6%에서 바로 틀렸다. 허허 아직 부족하다. 나의 접근 방법 다익스트라 문제라는 것만 생각하고 어떻게 문제에 다익스트라를 녹여낼까 고민했던 것 같다. 모든 가중치를 priority queue에 넣고 크기가 큰 순으로 weight를 0으로 집어 넣고 다익스트라를 적용시켰다. 하지만, 조금만 생각해보면 당연히 잘못된 풀이법이다. weight가 큰 것을 포장 도로로 만들 필요가 없기 때문이다. 또한 'k번 이하'라는 조건에 주의를 기울여야 했을 것이다. ..
-
[오브젝트] 객체지향 프로그래밍Books 2022. 5. 9. 18:17
"오브젝트: 코드로 이해하는 객체지향 설계" 책의 기록입니다. 객체지향 설계 설계란 코드를 배치하는 것이다. 설계를 구현과 떨어트려서 이야기하는 것은 불가능하다. 좋은 설계란, 오늘 요구하는 기능을 온전히 수행하면서 내일의 변경을 매끄럽게 수용할 수 있는 설계 왜? 요구사항이 항상 변경되기 때문임. 개발을 시작하는 시점에 구현에 필요한 모든 요구사항을 수집하는 것은 불가능에 가까움 코드를 변경할 때 버그가 추가될 가능성이 높기 때문 변경에 유연하게 대응할 수 있는 코드를 짜자.ᐟ 객체지향 프로그래밍을 향해 다음 두 가지에 집중하자 첫째, 어떤 클래스가 필요한지를 고민하기 전에 어떤 객체들이 필요한지 고민하라. 클래스의 윤곽을 잡기 위해서는 어떤 객체들이 어떤 상태와 행동을 가지는지 먼저 결정 둘째, 객체..
-
Elastic Stack: Elasticsearch, Kibana, Beats, LogstashEtc./unclassified 2022. 5. 7. 12:37
Elasticsearch 엘라스틱서치는 모든 요청과 응답을 REST API 형태로 제공한다. 키바나 콘솔 사용법 Management -> Dev Tools 손쉽게 엘라스틱서치와 REST API로 통신할 수 있음 인덱스 : 도큐먼트를 저장하는 논리적 구분자 특정 도큐먼트 개수에 도달하거나 특정 용량을 넘어서면 인덱스를 분리 ex) 날짜/시간 단위로 인덱스를 분리하면 특정 날짜의 데이터를 쉽게 처리 도큐먼트 : 실제 데이터를 저장하는 단위 클러스터 내부 구조 하나의 프로젝트에서 하나의 클러스터를 생성 클러스터 내부는 여러 개의 인덱스를 생성 인덱스 내부에는 JSON 형태로 된 다수의 도큐먼트가 존재 다수의 도큐먼트는 복수의 필드를 가짐 실행 확인 8.0.1 버전부터 자동 보안 설정이 되어 있어서 다음과 같이..
-
스프링부트 프로퍼티 암호화 (with. Jasypt)Back/spring 2022. 3. 1. 22:54
개요 앞선 포스트에서 JPA를 연결하는 과정에서 application.properties를 다음과 같이 설정하였다. ## h2 데이터베이스 설정 ## spring.h2.console.enabled=true ## Maria DB 데이터베이스 설정 spring.datasource.driverClassName=org.mariadb.jdbc.Driver spring.datasource.url=jdbc:mariadb://localhost:3306/around_hub_shop spring.datasource.username=root spring.datasource.password=비밀번호 ## JPA 설정 spring.jpa.hibernate.ddl-auto=create spring.jpa.show-sql=true..
-
스프링부트 서비스 구조Back/spring 2022. 2. 28. 22:46
Spring Boot 서비스 구조 Client, 즉 프론트 영역에서 Controller로 request를 한다. 이때 DTO 형식의 객체를 만들어 요청을 넣는다. 예를 들어 해당 요청이 회원 가입과 관련된 것이라면, 이름, 아이디, 비밀번호를 포함하는 DTO 객체를 만들어 컨트롤러로 요청을 한다. 컨트롤러는 해당 요청이 어떠한 요청인지, 회원가입 요청인지 판단하고 그것과 맞게 되는 서비스로 DTO 객체를 보낸다. 서비스는 이 비지니스 로직의 전반적인 내용을 처리하는 영역이다. 회원 정보에 이름, 아이디, 비밀번호뿐만 아니라 멤버 등급, 가입 날짜와 같은 추가적인 정보를 채워 넣는다. 이것을 바탕으로 Entity 객체를 만든다. Entity는 데이터베이스와 1대1 매핑이 되는, 즉 데이터베이스와 가장 가까..
-
Swagger 라이브러리Back/spring 2022. 2. 26. 18:38
Swagger 라이브러리? 서버 개발자가 API를 생성하면, 해당 API 명세서를 작성하여 클라이언트 개발자에게 전달을 하여야 한다. 그렇게 해야 클라이언트 개발자가 해당 명세서를 보고 개발을 진행할 수 있기 때문이다. 출금 API Spec - URL - request param - response 그런데, 백엔드 개발 특성상 API가 변경되는 경우가 생기는데 그럴 때마다 명세서를 다시 작성하고 전달한다면 매우 번거로울 것이다. 이럴 때 도움 되는 라이브러리가 바로 Swagger이다. Swagger는 서버로 요청되는 API 리스트를 HTML 화면으로 문서화하여 테스트할 수 있는 라이브러리이다. 서버가 가동되면서 @RestController를 읽어 API를 분석하여 HTML 문서로 작성한다. 가장 많이 사..