전체 글

알고리즘/코딩테스트

[프로그래머스] - 12982_예산

문제 소개 Level 1 https://school.programmers.co.kr/learn/courses/30/lessons/12982 테스트 케이스 (추가) [1,1,1,1,1] / 10 / 5 풀이 import java.util.Arrays; public class Pr12982 { public int solution(int[] d, int budget) { int answer = budget; Arrays.sort(d); for(int i = 0; i < d.length; i++) { answer -= d[i]; if(answer < 0) { return i; } else if (answer == 0) { return i+1; } } return d.length; } } sort() 후 정렬된 ..

알고리즘

투 포인터

이번에는 투 포인터 알고리즘에 대해서 정리해보려고한다. Two Pointer? 투 포인터 알고리즘은 하나의 배열에서 두개의 원소를 가리키는 서로 다른 인덱스를 움직이며 답을 내는 알고리즘이다. 한 방향으로만 인덱스를 증가시켜 원하는 값을 얻어오게되는 것이다. 예를 들어 살펴보자. (1 3 5 7 9, 연속된 여러 원소의 합이 10을 넘는 경우가 몇 번있는가?) 1회 start : 0, end : 1, cnt : 0 sum : 1 + 3 = 4 합계가 10을 넘지 않으므로 end를 1증가 시킨다. 2회 start : 0, end : 2, cnt : 0 sum : 1 + 3 + 5 = 9 합계가 10을 넘지 않으므로 end를 1증가 시킨다. 3회 start : 0, end : 3, cnt : 0 sum : ..

알고리즘

이분 탐색

이번에는 이분 탐색에 대해서 정리해볼 것이다. 이분탐색이란? 정렬되어 있는 배열에서 특정한 값을 찾아내는 알고리즘이다. 배열에서 중간 값을 선택하여 찾는 값과 비교하고, 중간 값이 찾는 값 보다 작다면 우측을 대상으로 찾는 값 보다 크다면 좌측을 대상으로 탐색을 진행해나가며 탐색범위를 반씩 줄여나가는 탐색 방식이다. 예를 들어 살펴보자. ( 2 3 5 7 9 13 15 20, 찾는 값 = 9 ) 1회차 2 3 5 7 9 13 15 20 가운데 값인 7을 선택하여 찾는 값인 9와 비교한다. 중간 값이 더 작기 때문에 우측을 기준으로 탐색을 진행한다. 2회차 9 13 15 20 이번에도 역시 가운데 값인 13을 선택해서 찾는 값인 9와 비교한다. 중간 값이 더 크기 때문에 좌측을 기준으로 탐색을 진행한다. ..

알고리즘

삽입 정렬

이번에는 삽입 정렬에 대해서 정리해보려고한다. 삽입 정렬이란? 삽입 정렬은 두 번째 자료부터 시작해서 그 앞의 자료와 비교하여 교환하는 방식의 알고리즘이다. 두 번째는 첫 번째 자료와 비교하여 교환하고, 세 번째는 두 번째와 첫 번째자료와 비교하여 교환하는 방식으로 진행된다는 것이다. 이미 정렬된 부분과 비교하여 교환하면서 자기 자리를 찾아 삽입하기에 삽입 정렬이라고 불린다. 예를 들어 살펴보자. (8 5 6 2 4) 1회전 8 5 6 2 4 → 5 8 6 2 4 2회전 5 8 6 2 4 → 5 6 8 2 4 3회전 5 6 8 2 4 → 5 6 2 8 4 → 5 2 6 8 4 → 2 5 6 8 4 4회전 2 5 6 8 4 → 2 5 6 4 8 → 2 5 4 6 8 → 2 4 5 6 8 위처럼 선택된 인덱..

알고리즘

버블 정렬

이번 글에서는 버블 정렬에 대해서 알아보려고 한다. 버블 정렬이란? 두 개의 인접한 원소를 검사하여 정렬하는 알고리즘이다. 예를 들어, 첫 번째와 두 번째를 비교하고 교환하고 두 번째와 세 번째를 비교하여 교환하는 식으로 진행하여 n 번째와 n+1번째 자료를 비교하고 교환하여 정렬을 진행한다. 버블 정렬의 특징으로는 맨 끝의 자료는 정렬이 완료되었기에 제외된다는 점에 있다. 그렇기에 마지막 요소는 반복문에서 제외한다. 예를들어 살펴보자 ( 5 3 4 1 2 ). 1회전 5 3 4 1 2 → 3 5 4 1 2 → 3 4 5 1 2 → 3 4 1 5 2 → 3 4 1 2 5 2회전 3 4 1 2 5 → 3 4 1 2 5 → 3 1 4 2 5 → 3 1 2 4 5 3회전 3 1 2 4 5 → 1 3 2 4 5..

알고리즘

선택 정렬

이번 글은 선택 정렬에 대해서 정리해보려고 한다. 선택 정렬이란? 선택 정렬은 정해진 순서에 들어갈 원소를 찾는 정렬이다. 첫 번째 순서에는 첫 번째 위치에 가장 최솟값을 찾아서 교환한다. 두 번째 순서에는 두 번째 최솟값을 찾아서 교환한다. 이를 계속 반복해서 정렬을 진행하게 된다. 예를 들어 설명해보겠다. ( 9 6 7 3 5 ) 1회전 9 6 7 3 5 → 3 6 7 9 5 2회전 3 6 7 9 5 → 3 5 7 9 6 3회전 3 5 7 9 6 → 3 5 6 9 7 4회전 3 5 6 9 7 → 3 5 6 7 9 위처럼 숫자 배열 안에서 가장 작은 숫자를 찾아서 현재 인덱스에 들어갈 숫자를 찾아서 교환하는 방식으로 이루어진다. 각 회전에 대한 설명은 다음과 같다. 1회전에서는 첫 번째 자리에 가장 작..

JPA

[JPA] JPA

JPA란? JPA (Java Persistence API) 자바 진영의 ORM(Object Relational Mapping) 기술의 표준이다. ORM을 사용하여 DB에 지속적으로 많은 양의 데이터를 관리하기 위한 API를 의미한다. 💡 ORM? (Object Relational Mapping) ORM이란 데이터를 Object 타입에서 Relational 타입으로 또는 반대로 바꾸는 기술이다. Object를 DB 내의 데이터와 매핑하는 것이 가장 중요한 특징이다. 이에 개발자들은 매핑시 데이터, 데이터 유형, 테이블 자체의 엔티티 및 엔티티와의 관계를 고려해야한다. 인터페이스이기 때문에 구현체가 존재한다. hibernate, EclipseLink... 등등 💡 Spring Data JPA? 우리가 Spr..

Spring

[Spring] HTTP 메시지 컨버터

이번에는 이전부터 계속 언급이 되었던 HTTP 메시지 컨버터에 대해 알아보려고 한다. 스프링 MVC는 메시지 바디에 맞춰서 알맞게 메시지 컨버터를 적용한다. 메시지 컨버터 구조 메시지 컨버터는 인터페이스로 이루어져있다. package org.springframework.http.converter; public interface HttpMessageConverter { boolean canRead(Class clazz, @Nullable MediaType mediaType); boolean canWrite(Class clazz, @Nullable MediaType mediaType); List getSupportedMediaTypes(); T read(Class

Spring

[SpringMVC] HTTP 요청, 응답처리

이번에는 어노테이션 기반 컨트롤러에서 요청을 처리하는 방법에 대해서 알아보려고한다. 이전에는 어떻게 처리했는지와 어노테이션 기반의 처리방법들을 살펴보자. HttpRequest 헤더 처리 Servlet 이용 먼저 HttpServlet를 이용한 방법이다. @RestController public class RequestHeaderController { @RequestMapping("/headers") public String headers(HttpServletRequest request, HttpServletResponse response){ return "ok"; } } HttpServletRequest, HttpServletResponse 우리가 이전에도 사용해봤었던 요소이다. 요청, 응답 정보에 대한 ..

Spring

[SpringMVC] 매핑 (Mapping)

이번에는 Spring을 이용한 여러가지 매핑 방법에 대해 알아보려고한다. 기본적으로 지금까지 사용했던 RequestMapping 이외에 몇번 사용해봤던 Get, PostMapping 그리고 활용법까지 살펴보자. @RequestMapping 가장 기본적으로 사용되는 요청에 대한 매핑법이다. @RequestMapping("/hello-basic") public String helloBasic(){ log.info("helloBasic"); return "ok"; } @RequestMapping(value = "/mapping-get-v1", method = RequestMethod.GET) public String mappingGetV1() { log.info("mappingGetV1"); return "o..

Spring

[SpringMVC] 로깅 (Logging)

앞으로 로그를 사용하게 될텐데 이에 대해서 간단히 알아보자. 평소에 사용하던 System.out.println()과 같은 시스템 콘솔을 이용한 출력을 사용하지 않고, 로그 라이브러리를 이용해서 로깅을 하는 것이 좋다. 로깅 라이브러리 SLF4J slf4j는 로그 인터페이스로써 주로 사용되는 것은 logback 같은 구현체이다. import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class Lo..

Spring

[Spring MVC] Spring MVC 패턴

개발 내용을 기준으로 정리한 내용을 작성해보겠다. 기존에 웹 서비스를 개발 할 때 사용되던 서블릿과 JSP는 다음과 같은 한계가 있었다. 서블릿과 JSP의 한계 서블릿 서블릿으로 개발할 때는 사용자에게 표시되는 화면이 자바 코드에 섞여서 지저분하고 복잡했다. JSP JSP를 사용하면서 HTML 작업을 깔끔하게 가져갈 수 있었고 중간중간 동적으로 변경이 필요한 부분에만 자바 코드를 적용할 수 있었다. 하지만 JSP를 살펴보았을 때 반은 회원을 저장, 관리하기 위한 비즈니스 로직이었고 나머지 반은 결과를 표시하기 위한 뷰 영역이였다. 즉 비즈니스 로직 또한 모두 JSP에 노출되어 있다는 말이되고 JSP가 너무 많은 역할을 하고 있는 것을 볼 수 있다. 이는 유지보수에도 너무 큰 수고가 들어가기에 문제가 될 ..

ppusda
기억하기 위한 기록들