본문 바로가기

전체 게시글374

[BaekJoon] 백준 2805번 / 나무 자르기 / 이진탐색 / Python 나무 자르기 아이디어 완전 탐색할 경우 시간복잡도는 O(N*N), 10^6 * 10^6 이므로, 시간초과! mid를 기준으로 전체 나무를 자른다. 이때, start 지점이 end 지점과 같아지거나 클때까지 반복 자른 나무의 총길이(SUM) > 가져가야하는 길이(M) start는 mid가 된다. 마치, 최소 높이로 선정하는 흐름이다. 자른 나무의 총길이(SUM) 10^6 * 20 -> 2*10^7 이진탐색 가능 자료구조 나무 리스트 .. 2023. 5. 4.
[Spring] JPA를 활용한 API 생성 해당 글은 2) 스프링부트로 웹 서비스 출시하기 - 2. SpringBoot & JPA로 간단 API 만들기을 참고해서 작성했습니다. 도메인 코드 Posts 클래스 : 실제 DB 테이블과 매칭될 클래스이며, Entity 클래스라고 함. @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity public class Posts extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(length = 500, nullable = false) private String title; @Column(columnDefini.. 2023. 5. 3.
[BaekJoon] 백준 1920번 / 수 찾기 / 이진탐색 / Python 이진탐색 이진 탐색을 위한 공식 st: 시작 인덱스 ed: 끝 인덱스 target: 탐색 대상 숫자 def search(st, en, target): if st == en: // Logic... return mid = (st + en) // 2 if nums[mid] 2억개) 아이디어 연속하다는 특징이 있는가? ==> .. 2023. 5. 3.
[MySQL] GROUP BY 절의 인덱스 사용 GROUP BY 절의 인덱스 사용 SQL에서 GROUP BY가 사용된다면, 인덱스의 사용 여부는 어떻게 결정될까? GROUP BY 절에 명시된 칼럼의 순서가 인덱스를 구성하는 칼럼의 순서와 같으면 GROUP BY 절은 일단 인덱스를 사용할 수 있다. 아래 예는 여러개의 칼럼으로 구성된 다중 칼럼 인덱스를 기준으로 한다. GROUP BY 절에 명시된 칼럼이 인덱스 칼럼의 순서와 위치가 같아야한다. 인덱스를 구성하는 칼럼 중에서 뒤쪽에 있는 칼럼은 GROUP BY 절에 명시되지 않아도 인덱스를 사용 할 수 있지만, 인덱스의 앞쪽에 있는 칼럼이 GROUP BY 절에 명시되지 않으면 인덱스를 사용할 수 없다. WHERE 조건절과는 달리 GROUP BY 절에 명시된 칼럼이 하나라도 인덱스에 없으면 GROUP BY.. 2023. 5. 2.
[Spring] JSON 형식의 데이터로 변환하기 JSON으로 변환하기 시스템이 복잡해지면서 다른 시스템과 정보를 주고받을 일이 발생하는데, 이때 데이터 교환 포맷으로 JSON을 사용할 수 있다. 검색한 글 목록을 JSON 형식의 데이터로 변환하여 브라우저에 출력하려면 어떻게 해야할까? [{ "seq": 2, "title": "zzzxcxzcz", "writer": "xx", "content": "\t\tccczxczxcxzcc", "regDate": 1682607600000, "cnt": 0 }, { "seq": 1, "title": "1112332131", "writer": "22", "content": "\t\t\t5141332144\t33134123", "regDate": 1682607600000, "cnt": 0 }] Jackson2 라이브러리.. 2023. 4. 30.
[Spring] 어노테이션 기반의 예외처리 / @ControllerAdvice와 @ExceptionHandler 어노테이션을 이용한 예외처리 스프링에서의 예외처리 스프링에서는 @ControllerAdvice와 @ExceptionHandler 어노테이션을 이용해서 컨트롤러의 메서드 수행 중 발생하는 예외를 일괄적으로 처리할 수 있다. 먼저, presentation-layer.xml 파일에 예외 처리 관련 어노테이션 사용을 위한 설정(Namespace)을 추가한다. 스프링 설정 파일에 mvc 네임스페이스를 추가하고, 아래와 같이 앨리먼트를 설정해야 한다. 이는 예외 처리 클래스에서 예외 처리 메서드 위에 @ExceptionHandler 어노테이션을 사용했을 때 인식시키기 위한 작업이다. 예외 처리 클래스 작성 예외의 종류에 따라서 적절한 예외 화면이 서비스되도록 예외 처리 클래스를 작성해보자. 먼저 클래스 위에 선언된 @ControllerAdvi.. 2023. 4. 29.
[Spring] 두 개의 레이어로 나눈 2-Layered 아키텍처 일반적으로 프레임워크 기반의 웹 프로젝트를 보면 아래와 같이 두 개의 레이어로 나누어 시스템을 개발한다. 이를 '2-Layered' 아키텍처 스타일이라고 한다. ConextLoaderListener 등록 Listener는 Servlet이나 Filter 클래스와 마찬가지로 web.xml 파일에 등록한다. 태그 하위에 2023. 4. 29.
[Spring] Controlle가 직접 DAO 객체의 메서드를 호출하면 안되는 몇가지 이유에 대해서 Controller는 매개변수를 통해 전달된 DAO 객체를 이용해 사용자가 요청한 로직 처리 아래 코드를 살펴보자. @Controller @SessionAttributes("board") public class BoardController { @RequestMapping("/insertBoard.do") public String insert(BoardVO vo, BoardDAO boradDAO) { boradDAO.insertBoard(vo); return "redirect:getBoardList.do"; } @RequestMapping("/updateBoard.do") public String updaate(@ModelAttribute("board") BoardVO vo, BoardDAO boardDA.. 2023. 4. 29.
refactor: 상속과 인터페이스 활용 해당 글은 NEXTSTEP 자바 플레이그라운드 with TDD, 클린 코드를 통해서 새롭게 배우고 내용을 기록한 글입니다. 1. 상황 가정 우리는 렌터카를 운영하고 있다. 현재 보유한 차량의 목록과 대수는 아래와 같다. Sonata : 2대 Avante : 1대 K5: 2대 차량을 예약할 때는 여행할 목적지의 이동거리를 입력받는다. 이때, 이동거리를 활용해 차량 별로 필요한 연료를 주입한다. 차량별 연비는 아래와 같다. Sonata : 10km/리터 Avante : 15km/리터 K5 : 13km/리터 2. 공통 기능을 구현할 클래스의 메서드 목록을 나열해보자. 리터당 이동 거리. 즉, 연비 ==> abstract double getDistancePerLiter(); 여행하려는 거리 ==> abstrac.. 2023. 4. 27.