
[Java]Merge sort
2023. 4. 20. 16:58
Algorithm
divide and conquer 방식으로 정렬! divide and conquer 문제를 나눌 수 있을 때까지 나누고 , 서브 문제들을 동일하게 재귀적인 방식으로 해결한다. 만약 더이상 나눌 수 없다면 직접 해결한다 😎병합정렬 원리 예를 들어서 다음과 같은 배열이 있다고 가정하면 이 배열을 계속해서 반으로 나눌 수 있다. 그리곤 각각의 sub 부분들을 비교해서 정렬한다 원소가 하나인 경우는 그 자체로 정렬되어 있으므로 원소 2개의 비교부터 시작한다. [50,100] 배열과 [32,67] 배열을 비교해서 정렬해보자 먼저 각 배열의 첫번째 원소끼리 비교한다. 더 작은 수를 원 배열의 첫번째 인덱스에 넣고 다음 수로 넘어가 비교한다. 1. 50과 32 비교 -> 32가 더 작음 -> 배열에 첫번째 인덱스에 ..

분할 정복 정복하기~
2023. 4. 20. 15:58
Algorithm
1.divide -> 문제를 작은 크기의 서브 문제들로 나눈다. 2.conquer -> 서브 문제(Recursive Case)들을 동일하게 재귀적인 방식으로 해결한다. 만약 문제가 충분히 작아 더이상 나눌 수 없다면(Base Case) 직접 해결한다 3.combine -> sub 문제의 솔루션을 합쳐서 원문제의 솔루션을 만든다 이라는 문제 해결 전략 사용 분할 정복을 이용하는 예시 merge sort, quick sort, binary sort https://develoyummer.tistory.com/75 [Java]Merge sort divide and conquer 방식으로 정렬! divide and conquer 문제를 나눌 수 있을 때까지 나누고 , 서브 문제들을 동일하게 재귀적인 방식으로 해결..

[DP]백준 9095 예제 뿌시기
2023. 4. 14. 16:37
Algorithm
알고리즘을 공부하면서 똑같은 문제도 여러 가지로 풀 수 있다는 것을 느꼈다. 그리고 각 문제마다 효율적인 방법이 있다. 그래서 알고리즘 문제를 풀때 다른 풀이와 내 풀이를 비교하며 어떤게 효율적인지 생각해보는 습관이 좋은 것 같다. 다음 문제는 백준의 9095번 분제 1,2,3더하기라는 문제이다. n이 11보다 작다는 제한이 주어져서 뭔가 메모이제이션을 이용해서 풀면 굉장히 효율적일 것 같았다. 근데 어떻게 풀지 감이 안와서 처음에는 DFS를 이용해서 풀었다. 1. DFS 풀이법 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { static int cou..

DFS / BFS
2023. 4. 14. 14:57
Algorithm
DFS/BFS를 한번에 정리해 보려고 한다. DFS/BFS로 풀기 좋은 대표적 문제 유형 1.경로 탐색(최단거리/시간) 2.네트워크 유형(연결) 3.조합 유형(모든 조합 만들기) DFS (깊이 우선 탐색) 한길로 쭉 가는 유형, 재귀로 구현하는 것이 일반적! 재귀를 타고타고 가서 탈출조건에 도달하고 파라미터를 하나씩 바꿔가면서 정점을 찾는 방식 DFS문제 예 프로그래머스-타겟 넘버 class Solution { static int answer; public int solution(int[] numbers, int target) { answer =0; dfs(0,0,numbers,target); return answer; } static void dfs(int index, int sum, int[]numb..

[mustache]spring boot 프로젝트에 mustache 템플릿 엔진 적용해보기
2023. 4. 10. 14:25
etc
화면을 구성하기 위해 템플릿 엔진 중 mustache를 사용하였다. 템플릿 엔진이란 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어를 말한다. 자바 진영에서는 JSP,Velocity,Freemarker,Thymleaf등의 템플릿 엔지니 존재하고 각 템플릿 엔진에는 장단점이 있다. JSP,Velocity : 스프링부트에서는 권장하지 않음 Freemarker: 기능이 많다. 자유도가 높다. 따라서 숙련도가 낮을 수록 Freemarker 안에 비즈니스 로직이 추가될 확률이 높다. Thymleaf: 스프링 진영에서 적극적으로 밀고 있음. 문법이 다소 어려움 . HTML 태그에 속성으로 템플릿 기증을 사용하는 방식이 높은 허들로 느껴지는 경우가 많다. Mustache: 문법이 간단하다. ..
[JPA] Entity 클래스에서 Setter 메소드의 사용
2023. 4. 9. 15:35
Spring
Entity 클래스를 만들 떄 getter/setter를 무작정 생성하는 경우가 있다. 이렇게 되면 해당 클래스의 인스턴스 값들이 언제 어디서 변해야하는지 코드상으로 명확하게 구분할 수가 없어 차후 기능 변경시 복잡해짐 따라서 Entity클래스에는 Setter메소드의 사용을 지양하고, 많약 해당 필드의 값 변경이 필요하면 명확히 그 목적과 의도를 나타낼 수 있는 메소드를 추가하는 것이 좋다. 예를 들어 주문 취소 메소드를 만든다고 가정해보자 잘못된 예 public clsaa Order{ public void setStatus(boolean status){ //set 메소드 작성 -> 목적과 의도가 명확하지 않다. this.status = status; } } public void 주문서비스의_취소이벤트(..

프로그램이 실행될 때 일어나는 일(컴퓨터의 저장공간)
2023. 4. 8. 16:33
카테고리 없음
구구단을 출력하는 소스코드를 짯다고 가정해보자. 이 소스코드를 실행하면 "콘솔에 구구단을 출력한다" 라는 결과가 나올 것이다. 눈에 보이는 과정은 간단하지만 코드를 돌린 컴퓨터에서는 안보이는 수많은 과정을 통해 결과가 나타나는 것이다. 먼저 프로그램이 실행되기 위해서는 프로그램이 메모리에 로드되어야 한다. 그리고 해당 프로그램 내에서 필요한 여러 변수를 위한 메모리 공간도 필요하다. 이 예시에서 '프로그램'의 주체는 '구구단 출력 소스코드'가 되고 '메모리'는 RAM이다. 소스코드로 작성된 프로그램이 메모리에 적재되고 실행되는 방법과 순서는 다음과 같다. 소스코드와 변수들이 메모리에 적재되는 과정 코드 영역(프로그램 시작->끝까지) 실행할 프로그램 코드가 메모리에 로드된다. 메모리에 적재된 프로그램을 프..

java- IEEE 754 부동 소수점 방식
2023. 2. 2. 11:34
Java
자바에서 소수의 계산시에 값이 3.02 + 1.06 = 4.08 이렇게 정확하게 떨어지지 않고 3.0800003 이런식으로 나오는 경우가 있다. 이는 자바의 소수점 계산방식 때문이다. 각종 프로그래밍 언어에서는 소수를 표현할 때 IEEE 754 부동 소수점 방식으로 소수를 표현하게 되는데, java에서도 이 방식으로 소수를 계산한다. 🔎부동소수점(floating point) 방식 실수를 컴퓨터상에서 근사하여 표현할 때 소수점의 위치를 고정하지 않고 위치를 나타내는 수를 따로 적는 방식 유효숫자를 나타내는 가수와 소수점의 위치를 풀이하는 지수로 나누어 표현 컴퓨터에서는 고정 소수점 방식보다 넓은 범위의 수를 나타낼 수 있어 많이 이용되지만, 근삿값으로 표현되며, 비교적 연산 속도가 느리다. 고정소수점과는 ..

[BigDecimal] java 소숫점 계산 정확하게 하기
2023. 1. 19. 14:04
Error
😮문제상황 public void calculateFuelTank(List checklists,Yata yata){ int positiveCount = (int) checklists.stream().filter(Checklist::isCheckpn).count(); int negativeCount = checklists.size() - positiveCount; if(positiveCount>negativeCount) yata.getMember().setFuelTank(yata.getMember().getFuelTank() + 0.1); else yata.getMember().setFuelTank(yata.getMember().getFuelTank() - 0.1); } } 프로젝트로 카풀 서비스를 만들던 ..