목록2024/08 (20)
ballqs 님의 블로그
투 포인터(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..
Lombok이란?Java의 라이브러리로 Spring에서 사용되는 온갖 Entity 및 Dto(Data Transfer Object)에 사용하며 반복되는 메소드를 Annotation를 사용하여 자동으로 작성해주는 라이브러리이다. 자동으로 작성되는 것은 Getter , Setter , toString , Constructor 정도로 간략하게 알고있다. 추가 방법 2가지1.프로젝트 생성시 의존성 주입 2.build.gradle 에 추가하는 방법compileOnly 'org.projectlombok:lombok'annotationProcessor 'org.projectlombok:lombok' Memo 클래스public class Memo { private Long id; private String..
오늘의 일정9:00 ~ 10:00 - 알고리즘 코드카타10:00 ~ 12:00 - 팀 프로젝트 발표 준비12:00 ~ 13:00 - 점심시간13:00 ~ 17:00 - 팀 프로젝트 발표17:00 ~ 18:00 - KPT 작성18:00 ~ 19:00 - 저녁시간19:00 ~ 22:00 - KPT 작성22:00 ~ - TIL 작성알고리즘 코드카타이번 문제는 난이도가 조금 있어보였다.프로그래머스의 쿼드압축 후 개수 세기 라는 문제였고 풀어봤다.해당 문제는 2^n * 2^n 크기의 2차원 배열이 있고 안에는 0과 1이 값들이 무작위로 들어가 있다.글로 설명보다는 아래의 입출력 예 설명으로 보는게 가장 빠를 것이다. 제한사항arr의 행의 개수는 1 이상 1024 이하이며, 2의 거듭 제곱수 형태를 ..
오늘의 일정9:00 ~ 10:00 - 알고리즘 코드카타10:00 ~ 12:00 - 팀 프로젝트 PPT 작성12:00 ~ 13:00 - 점심시간13:00 ~ 18:00 - 팀 프로젝트 PPT 작성18:00 ~ 19:00 - 저녁시간19:00 ~ 22:00 - 팀 프로젝트 PPT 작성22:00 ~ - TIL 작성알고리즘 코드카타프로그래머스 소수 찾기라는 문제를 풀었다.해당 문제는 숫자만 들어있는 문자열이 주어지고 해당 문자열을 하나씩 분리한 다음에 온갖 조합을 통해 숫자를 만들어내고 그 숫자가 소수인지를 찾는 문제였다. 제한사항numbers는 길이 1 이상 7 이하인 문자열입니다.numbers는 0~9까지 숫자만으로 이루어져 있습니다."013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있..
예전에 정렬에 관련된 게시물을 작성한 적이 있다.Array.sort와 Collections.sort의 차이점 이다. 하지만 여기에서는 말그대로 sort에 관련된 것만 작성했고Comparator 과 Comparable 를 이용한 정렬이 아니였다. 그래서 작성하여 메모해두려고 한다. Comparator compare()Comparator Interface를 찾아보면 compare()라는 메서드가 있고 int를 반환하도록 되어있다.compare() 메서드는 매개변수를 기반으로 비교한다.import java.util.Comparator;public class Test { public static void main(String[] args) { Person person1 = new Person(..
BFS(Breadth-First Search) 이란?너비 우선 탐색이라고 불리며 그래프 자료구조에서 완벽 탐색을 수행하는 탐색 기법이다.시작부분인 노드에 방문한 후 인접한 노드들을 우선으로 방문하며 기본적으로는 Queue 자료 구조를 이용해서 구현한다.특징재귀적으로 동작하지 않는다.BFS도 DFS처럼 노드 방문 여부를 검사해야 한다.최단경로를 찾는데 활용한다.탐색 과정 노드1 를 시작으로 자료구조에 데이터를 넣으면서 시작한다.노드1를 진행하고 방문완료 처리 후 노드1에서 파생되는 노드2와 노드3를 자료구조에 넣는다.2번 과정에 의해 노드2가 먼저 자료구조에 들어갔기에 노드2를 진행하며 노드2 또한 진행하고 방문완료 처리 후 노드 2에서 파생되는 노드4와 노드5를 자료구조에 넣는다.노드3를 진행하고 방문..
오늘의 일정9:00 ~ 10:00 - 알고리즘 코드카타10:00 ~ 12:00 - 팀 프로젝트12:00 ~ 13:00 - 점심시간13:00 ~ 16:00 - 팀 프로젝트16:00 ~ 17:00 - 나무반 강의17:00 ~ 18:00 - 팀 프로젝트 18:00 ~ 19:00 - 저녁시간19:00 ~ 22:00 - 팀 프로젝트22:00 ~ - TIL 작성알고리즘 코드카타프로그래머스의 롤케이크 자르기 문제를 풀이를 진행했다.해당 문제는 롤케이크에 토핑이 올라가 있는데 해당 토핑에는 여러가지 종류가 있다. 이 롤케이크를 형과 동생이 두조각으로 나눠 먹을때 서로 먹은 토핑의 개수가 같을 경우가 몇회 정도인지 구하는 문제이다.잘린 롤케이크 위에 올려진 토핑은 중복을 제거하고 개수를 세어서 비교하면 ..
오늘의 일정9:00 ~ 10:00 - 알고리즘 코드카타10:00 ~ 10:30 - 팀프로젝트 발제10:30 ~ 12:00 - 팀 회의12:00 ~ 13:00 - 점심시간13:00 ~ 17:00 - 팀 회의17:00 ~ 18:00 - 팀 프로젝트18:00 ~ 19:00 - 저녁 시간19:00 ~ 20:30 - 팀 프로젝트20:30 ~ 21:00 - TIL 작성알고리즘 코드카타뒤에 있는 큰 수 찾기 알고리즘 풀이를 진행했다.해당 문제는 정수로 이루어진 배열 numbers가 있는데 여기서 각 원소들의 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 큰수를 배열이 담아서 return 하는 방법이다.다만 하나의 예외적인 상황이 있는데 큰수가 존재하지 않으면 -1를 담는다. 제한사항4 1입출력 예numbersresu..