목록분류 전체보기 (77)
ballqs 님의 블로그

오늘 풀어본 문제는 프로그래머스의 점 찍기 라는 문제를 풀어보았다.애초에 어떻게 접근해야할지 감도 못잡고 있다가 같이 공부중인 분이 힌트를 줘서 진행이 가능해졌다.문제 설명이 문제는 x축과 y축이 직교하는 좌표명면에서 k 값과 d 값이 주어지면 다음과 같이 점을 찍는다.원점(0, 0)으로부터 x축 방향으로 a*k(a = 0, 1, 2, 3 ...), y축 방향으로 b*k(b = 0, 1, 2, 3 ...)만큼 떨어진 위치에 점을 찍습니다.원점과 거리가 d를 넘는 위치에는 점을 찍지 않습니다.이는 좌표명면에 d 반지름의 원안에 k라는 간격만큼 점을 얼마나 찍을수 있는지 알아보기 위한 문제이다.제한 조건1 ≤ k ≤ 1,000,0001 ≤ d ≤ 1,000,000입출력 예kdresult2461526풀이과정주..

DB에 데이터를 저장해야하는 일이 있을때 대용량으로 데이터를 넣어야하는 경우가 있다면 JPA에서는 매번 하나하나 Insert문을 만들어서 실행시키고 있을 것이다. 이건 대용량으로 insert 하는것에 매우 적합하지 않은 방법이다.SQL에서는 insert 에 values 를 연달아 쓰는 방법이 바로 Bulk Insert 방법이다.그렇게 글 내용대로 3가지를 비교해보도록 하겠다. 참조글 : Spring JPA Save() vs SaveAll() vs Bulk InsertSave()@Test@Transactional@Rollback@DisplayName("Save() 테스트")void Test1() { long startTime = System.currentTimeMillis(); for (int ..

PasswordEncoder 암호화현재 듣고 있는 강의에서는 이러한 내용을 가르쳐 주었다.implementation 'org.springframework.boot:spring-boot-starter-security' security DI를 추가하고@Configurationpublic class PasswordConfig { @Bean public PasswordEncoder passwordEncoder() { // Hash 함수 비밀번호를 암호화해줌 // 해당 메서드를 사용해서 비밀번호를 encoding하는 것 return new BCryptPasswordEncoder(); }} PasswordEncoder를 수동적으로 bean등록하여 사용 하는 방식..

Spring을 이용하여 Naver Open API를 사용하려면 우선 아래사이트에 접근해야한다.https://developers.naver.com/products/intro/plan/ https://developers.naver.com/products/intro/plan/ developers.naver.com애플리케이션 등록하기 등록하기 화면에서 작성해야하는 내용들이 있다.애플리케이션 이름 , 사용 API , 비로그인 오픈 API 서비스 환경 등이 있으며 아래와 같이 작성했다.등록이 완료되면 Client ID와 Client Secret를 발급받는다.다만 중요해서 이미지를 잘라서 보여주겠다.애플리케이션 사용하기출처 :https://developers.naver.com/docs/serviceapi/search..

JWT란?Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim기반의 Web Token이다.토큰의 한 종류라고 생각하면 된다. 일반적으로 쿠키 저장소를 사용하여 JWT를 저장한다.JWT 사용이유기본적으로 클라이언트가 많을 경우 세션의 경우는 아래와 같이 사용된다.Session storage가 모든 Client의 로그인 정보 소유하고 있기 때문에 모든 서버에서 모든 Client의 API 요청을 처리한다.단! 이렇게 처리 될 경우 Session storage에 많은 접근이 있어서 과부하가 올 확률이 높다.그렇게 먹통이 되면 모든 서버가 동작이 안되게 처리되는 것이다. 로그인 정보를 Server에 Session에 저장하지 않고 Client에 로그인 정보를 JWT로 HS256인코딩 하여 저장하며 JW..

DFS 알고리즘에는 꼭 재귀 메서드를 호출하는게 아닌 Stack이나 Queue를 활용하는 방법도 있다고 한다. 해당 방식으로 풀게된 문제는 프로그래머스의 전력망을 둘로 나누기이다.문제 설명n개의 송전탑이 전선을 통해 하나의 트리 형태로 연결되어 있고 여기서 하나의 전선을 끊어서 현재의 전력망 네트워크를 2개로 분할하는 문제이다.단! 두 전력망이 가지게 되는 송전탑의 개수를 최대한 비슷하게 맞추고자 한다.제한사항n은 2 이상 100 이하인 자연수입니다.wires는 길이가 n-1인 정수형 2차원 배열입니다.wires의 각 원소는 [v1, v2] 2개의 자연수로 이루어져 있으며, 이는 전력망의 v1번 송전탑과 v2번 송전탑이 전선으로 연결되어 있다는 것을 의미합니다.1 ≤ v1 전력망 네트워크가 하나의 트리 ..

JPA란?Java ORM(Object-Relational Mapping)기술의 대표적인 표준 명세이다. JPA는 애플리케이션과 JDBC 사이에서 동작된다JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자동으로 처리해준다.또한 객체를 통해 간접적으로 DB 데이터를 다룰 수 있기 때문에 매우 쉽게 DB 작업을 처리가 가능하다. 하이버네이트(Hibernate)란?JPA 는 표준 명세이고, 이를 실제 구현한 프레임워크 중 사실상 표준이 하이버네이트이다.스프링 부트에서는 기본적으로 ‘하이버네이트’ 구현체를 사용 중이다.영속성 컨텍스트란?Persistence를 객체의 관점으로 해석해 보자면 ‘객체가 생명(객체가 유지되는 시간)이나 공간(객체의 위치)을 자유롭게 유지하고 이동할수 있는 객체의 성질’을 의미한..

투 포인터(Two Pointer) 이란?배열이나 리스트에서 두 개의 포인터를 사용하여 특정 조건을 만족하는 부분 구간을 효율적으로 탐색하는 알고리즘이다. 일반적으로 배열이나 리스트가 정렬되어 있을때 사용한다.두 개의 포인터는 보통 양 쪽 끝으로 시작하여 각각 탐색하면서 특정 조건을 만족하는지 검증한다.다만! 한 쪽 방향에서 동시에 시작하는 경우도 있는데 이는 해당 배열의 합과 차를 통해 특정 조건이 만족하는지 검증한다.투 포인터의 문제 적용프로그래머스 문제를 풀다가 이런 문제를 접했다.연속된 부분 수열의 합 이라는 문제이다. 문제 설명내림차순으로 정렬된 배열이 주어질 때 특정 조건을 만족하는 수열을 찾는 문제이다.주어진 k값이 있고 배열의 연속된 부분의 합이 k와 같으면 해당 포인터들의 index를 반환..

받아오는 Parameter에 따라 유효성 검사를 할수 있다는 기능이 있다고 해서 알아보았다.@Valid 라는 기능이다. 이건 어떻게 사용하는지 작성해보겠다.의존성 추가build.gradle 파일을 찾아서 추가하자.implementation 'org.springframework.boot:spring-boot-starter-validation'사용방법@RestController@RequestMapping("/api/schedule")public class ScheduleController { private final ScheduleService scheduleService; @Autowired ScheduleController(ScheduleService scheduleService) { ..
프로그래머스 SQL 문제 : 입양 시각 구하기(2)테이블 명 : ANIMAL_OUTS NAMETYPENULLABLECOMMENTANIMAL_IDVARCHAR(N)FALSE동물 아이디ANIMAL_TYPEVARCHAR(N)FALSE생물 종DATETIMEDATETIMEFALSE입양일NAMEVARCHAR(N)TRUE이름SEX_UPON_OUTCOMEVARCHAR(N)FALSE성별 보호소에서는 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성! 코드# WITH문으로 작성하여 시간을 만들어 놓고 ANIMAL_OUTS 테이블과 LEFT JOINWITH RECURSIVE HOURS AS ( SELECT 0 AS HOUR UNION ALL SELECT HOUR + 1..