반응형

분류 전체보기 316

JPA Entity 정적 팩토리 메소드에 관하여

JPA의 Entity를 새롭게 생성하려면 다음과같은 3가지 선택지가 주어진다. 1. 생성자로 생성하기 2. 정적 팩토리 메소드로 생성하기 3. @Builder 로 생성하기 그 중에서도 정적 팩토리 메소드 부분을 소개하겠다. 개인적으로도 이 방식이 더 마음에 든다. 정적 팩토리 메소드의 생김새 다음과 같이, public static(정적) 을 사용한다. 그렇다면 정적 팩토리 메소드를 왜 사용할까?? 정적 팩토리의 장점 3가지를 살펴보려고한다. 1. 자유롭게 메소드명을 설정할수 있다. 첫번째가 생성자 메소드고, 두번째가 정적 팩토리 메소드이다. 생성자 메소드 같은경우엔, 반드시 자신의 클래스명을 입력해야한다. 반면에, 정적 팩토리 메소드는 메소드명을 작성할수 있기때문에, 좀 더 직관적인 사용이 가능하다. 솔..

자바/JPA 2022.09.19

PCCP 모의고사 1회 : 유전법칙

문제분석 멘델의 유전법칙을 이용하여 n세대의 X번 개체의 유전자를 반환하는 문제다. 이 문제에선 1세대가 무조건 Rr이다. 멘델의 유전법칙에따라 2세대부터 RR일경우, 자식은 모두 RR Rr일경우, 1:2:1 비율로 RR Rr rr 이 생성, rr일경우 모든 자식이 rr이 생성된다. 멘델의 유전법칙에따라서 N 세대에 X번째 의 나올걸 유츄해야한다. 유전 세대는 이전세대의 4배씩 생성된다. N세대에 X번째의 정확한 자식의 유전자를 알기위해선 N-1세대의 부모의 여부를 알아야한다. 그 여부를 Stack을 이용해서 구현했다. Stack을사용해 X번째를 4로나눈 나머지를 사용하여 부모의 유전자를 추정해간다. 문제는 1번부터세고, 컴퓨터는 0번부터세기에, 둘의 시작번호를 통일시키기 좀 애를 먹었다. 문제풀이 1 ..

알고리즘 2022.09.18

PCCP 모의고사 1회 : 체육대회

문제 분석 종목마다 체육대회 대표를 뽑아서 능력치 합을 최대로 높게만드는 문제다. 어떤 알고리즘을 쓸까 고민하다가 역시 DFS,BFS 완전탐색뿐인것 같았다. 선수들은 중복으로 대표를 선정할수없으니, Visited배열로 사용여부를 체크해주자. 그 뒤, DFS를 사용해 백트래킹 로직을 짜면 되는 쉬운문제다. 문제풀이 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 import java.util.*; class Solution { boolean[] visited; int scope; int total=0; public int solution(int[][] ability) { //유저수 visited..

알고리즘 2022.09.18

PCCP 모의고사 1회: 외톨이 알파벳

문제 1번 : 외톨이 알파벳 외톨이 알파벳을 찾아서 사전순대로 반환을 해주면 되는문제다. 외톨이 알파벳은 서로 떨어져있는 알파벳이라고 생각하면된다. 문제 1번 같은경우는 테스트케이스를 잘 줘서, 꽤 쉽게 풀린것같다. 외톨이 알파벳의 판별여부는 뭉쳐있음 And 뭉쳐있음도 허용이되기때문에 조건문을 작성하기 조금 까다롭다. 우선, 필자는 알파벳이 떨어져있음을 구현하기위해, Map을 하나 구현했다. Map에 알파벳이 있으면 이미 등록되있음을 나타내고, 알파벳이 없으면 새로운 알파벳을 뜻한다. 하지만, 알파벳은 연속으로 중복일수가있다. 이 경우를 제거를 잘 해줘야한다. 필자는 current변수를 하나 지정해서 체크를 해줬다. 또한, 외톨이 알파벳형식이 2번 3번 ..여러번 일어날수있으니, EX) zazbzczd ..

알고리즘 2022.09.18

자바(Spring) OpenAPI를 통한 JSON Parser 코드

이번시간엔 OpenAPI를 통해 데이터를 가져오는 코드를짜보겠다. OpenAPI는 개발자라면 누구나 사용할 수 있도록 공개된 API를 말하며, 개발자에게 사유 응용 소프트웨어나 웹 서비스의 프로그래밍 적인 권한을 제공한다. 즉, 데이터를 제공하는 외부 API라고 보면된다. 이 OpenAPI를 통해 우리는 실생활 데이터를 수집하여 프로젝트에 써먹을수있다. 그런데 이 실생활 데이터는 대부분 JSON을 지원한다. XML도 있긴하지만, 여러태그가 붙어서 JSON이 훨씬 가볍다. OpenAPI를 직접 체험해볼수있고 문제도 풀어볼수있는 환경이다. 카카오 2021 2차 코딩테스트 문제를 예시로 들어보자. https://programmers.co.kr/skill_check_assignments/67 프로그래머스 코드 ..

JDK 11 vs JDK17 무엇이 업그레이드 되었을까?

이번 프로젝트에서 JDK17 을 사용하기로 하였다. JDK17 무엇이 업그레이드 되었을까? 이 포스팅은 본인이 느끼기에 JDK17에서 확연히 바뀐 기능을 정리해보겠다. 1. 텍스트 블록 예시로 JDK11에서 JSON데이터를 입력할때다. JSON데이터를 만들어서 전송하기위해선 다음 사진과같이 번거로운 문자열 연결을 해야만한다. JDK17 에선 이를 해결하기위한 새로운 문법 """ (큰따옴표 3개) 를 지원한다. 마치 타임리프(Thymeleaf)에 리터럴과 같은 기능을 처리한다. """ """ 사이에 내가 보내고싶은 데이터형식을 자유롭게 작성하고 보낼수있다. 다음과같은 String을 출력한다. 2.스위치 문법 개편 다음과 같은 switch 문에서 APPLE를 호출하면 다음과같은 코드가 출력된다. 그렇다. S..

자바 2022.09.03

[프로그래머스 ,Java] Level3: 등산코스 정하기

문제분석 문제목표 : 출발점과 산봉우리의 intensity가 최소가되는 등산코스를 정해주세요. 특징1. Intensity는 각노드마다 휴식없이 이동하는 거리다. 노드마다는 휴식공간이 있다. 특징2. 산봉우리는 코스에 단 1개만 존재해야한다. 처음 접근: 플로이드 와샬 사용 -> 여러개의 출발점과 여러개의 산봉우리가 존재하기때문에, 모든 정점과 모든 정점의 최소거리를 구하는 알고리즘을 사용했다. 단, 이 문제는 최소거리가 아닌 Intensity를 구해야하므로 알고리즘을 고쳐 사용해야한다. -> 결과: 정확성 O 효율성 에러 생각되는 이유: 원하는 출발점 -> 산봉우리의 Intensity는 구할수있지만, 그외의 경우, 경유지->경유지, 산봉우리->산봉우리, 출발점 -> 출발점 과같은 케이스들의 쓸데없는연산은..

[프로그래머스,자바] Level3: 모두 0으로 만들기

문제분석 목표: 모든 노드의 값(가중치)을 0으로 만든뒤 최소 연산의 횟수를 구해주세요. 특징1. 인접한 노드끼리는 값을 주고받을수있다. 모든 값을 0으로 만들기위해선 노드와 노드끼리 값을 교환할수밖에 없기때문에, 그래프를 그릴필요가있다. 그래프를 그리는법은 여러방법이있다. Graph 리스트를 하나 만들어 저장하거나, 객체를 만들어서 저장하거나.. 필자는 객체 Node를 만들어서 그래프를 그려보려고한다. 전략은 각 노드마다 child 리스트를 생성한다. 그 노드가 갖고있는 자식노드를 통해 연결고리를 만드는것이다. 문제에서 데이터를 주고받는건 양방향이니 (자식 ->부모 , 부모 ->자식) 양방향으로 잡아주자. 사실 부모 -> 자식으로 데이터가 들어오는게 100%확정이라면 양방향으로 안해도 되지만, 그렇게 ..

[프로그래머스 ,Java] Level3: 기지국 설치

문제분석 문제 목표: 모든 아파트에게 전파 송신하기위한 최소 전파탑의 갯수 특징 1. 이미 설치된 전파가 있음. 이 문제를 읽어보고 풀기전에 제한사항을 보면 아파트의 갯수가 2억이다. 저 어마어마한 숫자를 보고 아파트 갯수는 for문 돌리면 안대겟구나 라고 느낄것이다.. 따라서, 조금 아이디어가 필요하다. Ex) 만약 이미 설치된 전파가 없으면 어떨까? -> 그렇다면 전체 아파트 갯수 / 전파의범위가 될것이다. (단, 나머지가 존재하면 +1) 예로 아파트가 24며 전파가 1이면, 전파범위는 3이될것이고 최소 8개가 필요하다. 전파탑이 미리 설치된 경우의 전략은 어떻게 하면될가? 전파탑을 마치 배열을 절단하는도구??로 생각해보자. 예시로, 아파트가 20개 전파가 1, 미리 전파탑이 10지역에 설치됫다면 아..

반응형