java 30

이것이 코딩 테스트다 (JAVA 코드) - Greedy

개요 그리디 (greedy) 알고리즘이란 현재 상황에서 지금 당장 좋은 방법으로만 풀이를 해나가는 것을 그리디 알고리즘이라고 합니다. 그리디 알고리즘의 핵심은 정당성 분석을 통한 풀이 입니다. 단순히 가장 좋아보이는 것만을 반복해도 최적의 해가 나올 수 있는지 검토해야 합니다. 출처 이것이 코딩테스트다 예시 루트 노드부터 시작하여 거쳐가는 노드의 값들의 합을 최대값으로 구하고 싶을 때 최적의 해를 구하려면 어떻게 해야할까요? 최적의 해는 5 - 7 - 9 노드일겁니다. 하지만 그리디 알고리즘은 현재 상황에서 가장 큰 값만 선택하게 되는 경우입니다. 그러므로 보통은 5 - 10 - 4노드를 선택합니다 그렇다면 이 경우 최적의 해가 아니게 됩니다. 일반적인 상황에서 그리디 알고리즘은 최적의 해가 보장받을 수..

JPA - JPA의 정의, 개요

목차 개요 요새 자바언어를 공부하시거나 사용하고 계시는 많은 개발자분들은 모를 수 없는 게 있습니다. 바로 JPA 저도 자바 개발자로서 JPA를 사용해보았고 대략 어떤개념인지는 알고 있었으나, 제대로 공부했다는 아니었어서 이번에 JPA관련 강의를 들으며 배운점과 추가적으로 공부한점을 모아 포스팅을 해보겠습니다. JPA와 ORM JPA란 Java Persistence API 의 약자로 자바 진영의 ORM(Object Relational Mapping) 기술의 표준입니다. 이렇게 이름만 들어서는 정확히 어떤기능을 하는건지 잘 모르겠습니다. 먼저 ORM에 대해 알아보자면 객체와 관계형 데이터베이스사이에서 매핑해주는 기술이며, 이를 통해 객체는 객체답게 설계하고 관계형 데이터베이스는 데이터베이스대로 설계할 수 ..

Programming/JAVA 2022.12.04

Spring Webflux - Reactive Streams API 만들기[1] 프로젝트 생성

개요 지난 포스팅에선 Webflux의 기본개념과 Reactive Streams 의 이론에 대해 알아보았습니다. 이번엔 Weblfux를 사용해 비동기 API를 만들어보고 추후 시큐리티로 API KEY 방식의 인증을 구현해보겠습니다. 요샌 보통 JWT를 쓰지만, JWT는 예제도 많고 API KEY 방식도 아직 쓰이는곳이 많아서 선정했습니다. 먼저 예제 프로젝트를 생성해보겠습니다. JAVA11 SpringBoot 2.7.4 Gradle R2DBC Mysql 큰 항목은 이렇게 설정했으며, Gradle dependencies 에 r2dbc-mysql connection은 따로 입력해주세요. 기존 start.spring.io 에 있는 mysql connection은 연결이 안되므로 따로 디펜던시를 설정합니다. bu..

카테고리 없음 2022.10.19

JAVA - 숫자카드 (백준, 10815)

문제 문제의 요구사항은 결국 길이 (갯수)N 의 카드와 길이 (갯수)M 의 카드를 비교해 일치하는 index 는 1 아니면 0을 출력한다. 맨처음엔 이분탐색 문제인지도 모르고 그냥 단순히 완전탐색으로 찾으려고만 했다.. import java.util.*; public class main { public void card() { List aList = new ArrayList(); List bList = new ArrayList(); String result = ""; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); for(int i=0; i

알고리즘 공부 - 재귀함수 2편(하노이의 탑, 재귀 제거)

이번 포스팅에선 지난 재귀함수 1편에 이어서 공부해보겠습니다! 재귀함수를 제거하거나 비재귀적으로 표현하려면 어떻게 해야할까요? 꼬리 재귀의 제거 메서드의 꼬리에서 재귀 호출하는 메서드 recur(n-2)라는 말은 '인자로 n-2를 전달하여 recur 메서드를 호출한다.' 는 의미 입니다. 따라서 이 호출은 다음과 같이 바꿀 수 있습니다. n 의 값을 n - 2로 업데이트하고 메서드의 시작 지점으로 돌아갑니다. static void recur(int n) { while (n > 0) { recur(n - 1); System.out.println(n); n = n-2; } } 이렇게 하면 메서드의 끝에서 실행하는 꼬리 재귀(tail recursion) 는 쉽게 제거할 수 있습니다. 일반 재귀의 제거 그런데 ..

알고리즘 공부 - 검색부터 다시 해보자

개요 나는 현재 개발자로 솔루션회사에서 근무중인 주니어개발자이다. JAVA 언어가 베이스인 회사에서 자바와 스프링 프레임워크로 코딩하는 것은 당연하지만, 일을 할수록 공부하는 시간이 줄어들고 알고리즘등 혹시 나중에 코딩테스트가 필요할텐데 싶은 생각에 앞으로 꾸준히 문제를 풀어야겠다고 생각이 들어 문법은 건너뛰고 검색 알고리즘부터 재귀, 큐, 스택등으로 개념정리부터 해보려고 한다. 열심히 정리해보자! 선형검색(linear search) 간단하게 생각하자면 선형 = 일자로 쭉 늘어진 것 따위 일것이다. 그렇게 key 와 일치하는 값을 찾기위해 하나씩 검색하면서 진행하는 알고리즘으로 보통 for문이나 switch문으로 loop를 돌려서 index 를 증가시키며 찾는 것이다. 가장 단순한 알고리즘으로 구현하기도..

Spring - WebClient 사용해보기

개요 SpringBoot, Spring 환경에서 WebClient 를 사용하여 API Request 를 하는 클라이언트 프로젝트를 만들어보기. 서버와 API 통신을 위해 필요한게 무엇인지 알고 WebClient 의 기능사용해보기. Why ? WebClient 란? Spring 5.0에서 추가된 interface 이다. 이전 버전에서는 클라이언트로 RestTemplate 를 사용했으나, 비동기식 통신의 필요성으로 인해 WebClient 가 나오게 되었고, 현재 버전에서는 WebClient로 개발하는게 권장되는 상황이다. 그렇다면 RestTemplate 와 WebClient 가 어떤차이점이 있을까 ? RestTemplate 와 WebClient 의 차이점을 보기쉽고 간편하게 볼 수 있도록 표로 비교해보자 R..

Programming/Spring 2022.05.16

이펙티브 자바 - 2장 빌더, 싱글톤, private 생성자

아이템 2 - 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩토리와 생성자에는 똑같은 제약이 하나 있다. 선택적 매개변수가 많을 경우 적절한 대응을 하기가 어렵다는 점이다. 처음 자바를 공부할 때, 사용자가 필요로하는 경우의 수가 많을수록 생성자의 가짓수도 많아지는 경우를 경험해보았을 것이다. 1. 점충적 생성자 패턴 public class Camping { private final int tent; private final int clothes; private final int backpack; private final int food; private final int camper; public Camping(int tent, int food) { this(tent, food); } public C..

Programming/JAVA 2022.03.13

이펙티브 자바 - 1, 2장 개요, 객체 생성과 파괴

개요 매주 이펙티브 자바를 한 단원씩 공부하기로 했다. 자바 개발자로 일하면서 애매하게 알고넘어갔던 부분과 심화적으로 알고있어야 할 내용을 배우기위해서 이펙티브 자바를 선택했다. 어려운 책이라고 후기들을 봤고, 선배 개발자와 얘기해도 어려운 책이니 잘 안읽힌다고 들었지만, 어렵다고 미루기보단 지금부터 봐 둬야 나중에 다시보는 일이 있어도 보기 수월할 것 같았다. 그러므로 시작해보겠다. 1장 : 들어가기 자바 입문자가 아닌 자바에 익숙한사람을 위한 책이라고 설명하며 시작한다. 나 역시 자바 개발자라고 하지만 입문자나 마찬가지라고 생각한다. 문법만 안다고 전부를 아는건 아니며, 알고 쓰는것과 모르고 쓰는것은 다르다는 것을 알고 있기 때문이다. 이 책에선 성능적인 부분도 있지만 그보다 명확하고 정확하고 유용하..

Programming/JAVA 2022.02.20

프로그래머스 - 2016년 (JAVA)

문제 설명 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요. 제한 조건 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다) 입출력 예 abresult 5 24 "TUE" class Solution { public String solution(int a, int b) { String answer = ..