java- IEEE 754 부동 소수점 방식
2023. 2. 2. 11:34
Java
자바에서 소수의 계산시에 값이 3.02 + 1.06 = 4.08 이렇게 정확하게 떨어지지 않고 3.0800003 이런식으로 나오는 경우가 있다. 이는 자바의 소수점 계산방식 때문이다. 각종 프로그래밍 언어에서는 소수를 표현할 때 IEEE 754 부동 소수점 방식으로 소수를 표현하게 되는데, java에서도 이 방식으로 소수를 계산한다. 🔎부동소수점(floating point) 방식 실수를 컴퓨터상에서 근사하여 표현할 때 소수점의 위치를 고정하지 않고 위치를 나타내는 수를 따로 적는 방식 유효숫자를 나타내는 가수와 소수점의 위치를 풀이하는 지수로 나누어 표현 컴퓨터에서는 고정 소수점 방식보다 넓은 범위의 수를 나타낼 수 있어 많이 이용되지만, 근삿값으로 표현되며, 비교적 연산 속도가 느리다. 고정소수점과는 ..
[데일리코딩] 피보나치, 메모이제이션
2022. 11. 7. 00:30
Algorithm
피보나치 수열 중 n번째 항의 수를 리턴하는 간단한 문제였다. 입력 : int n 출력 : int타입 💡주의사항 재귀함수로 풀어야 한다 반복문의 사용이 금지된다. 아 별거아니네~ 하고 처음에는 재귀를 사용해서 룰루랄라 풀어서 제출하려고 했다. 근데 자꾸 시간초과가 뜨는 것이다.. 알고보니 재귀를 이용한 문제는 메모리를 상당히 잡아먹는 비효율적인 방법이고 위 방법대로 푼다면 함수들의 총 호출횟수가 대략 2^n 근처라서 n이 25~30 넘어가면 힘들어진다고 한다. 따라서 메모이제이션을 쓰면 효율적인 알고리즘(O(N))으로 연산을 줄일 수 있다! 🔎메모이제이션이란 이미 계산된 값을 배열에 저장하고 필요시마다 값을 불러와 쓴다. 이렇게 하여 불필요하게 중복되는 계산을 줄이는 것이다! public class fi..
[백준 2609] 최대공약수와 최소공배수, 유클리드 호제법
2022. 11. 7. 00:00
Algorithm
문제 입출력 예시 처음 풀이 처음에는 정말 최대공약수와 최소공배수 구하는 공식 그대로 생각해서 구현해서 풀었다. import java.util.Scanner; //최대공약수와 최소공배수 public class Baek_2609 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int num1 = in.nextInt(); int num2 = in.nextInt(); int commonDivisor = 1; //최초 최대공약수 1로 설정 //두 수중 작은 수에서부터 돌면서 공약수를 확인 for (int i = Math.min(num1, num2); i > 1; i--) { /*만약 i가 num1과 num2의 공약수이..
Spring - JDBC기반 Domain Entity와 테이블 설계
2022. 11. 2. 11:55
Spring
👀애그리거트 루트(Aggregate Root) 선정 기준 애그리거트 내의 도메인들 중에서 다른 모든 도메인들과 직간접적으로 연관이 되어 있는 도메인 데이터베이스의 테이블 간 관계로 보자면, 애그리거트 루트는 부모 테이블이 되고, 애그리거트 루트가 아닌 다른 도메인들은 자식 테이블 즉, 애그리거트 루트(Aggregate Root)의 기본키 정보를 다른 도메인들이 외래키 형태로 가지고 있다고 볼 수 있다 관계형 데이터베이스에서 A 테이블의 기본키를 B 테이블이 가지고 있다면 A는 부모 테이블이 되고, B는 자식 테이블이 됩니다. B인 자식 테이블이 가지고 있는 A 테이블의 기본키를 외래키라고 함 📋샘플 애플리케이션 도메인 엔티티 및 테이블 설계 도메인에서 애그리거트 루트 찾기 📜애그리거트 간의 관계 회원 정..
Spring - Mapper 클래스의 구현, MapStruct
2022. 10. 30. 14:19
Spring
매퍼(Mapper)를 이용한 DTO 클래스 ↔ 엔티티(Entity) 클래스 매핑하는 과정을 정리해 보려 한다. 요그림에서 Controller 에서 DTO Entity Class 요 과정을 매퍼라 한다!! 먼저 매퍼클래스를 구현해보자! //MemberController에서 사용하는 DTO 클래스와 Member 간에 서로 타입을 변환해주는 매퍼(Mapper)클래스 import org.springframework.stereotype.Component; @Component // (1)스프링빈 등록을 위해 추가 public class MemberMapper { // (2) MemberPostDto를 Member로 변환 public Member memberPostDtoToMember(MemberPostDto mem..
Java- StringTokenizer()사용 중 ArrayIndexOutOfBoundsException 오류
2022. 10. 15. 13:38
Error
처음 백준 문제를 풀때 가장 많이 헷갈리는 부분이 입출력을 어떻게 받는가이다. 아직 StringTokenizer의 사용법이 헷갈려서 오류가 뜰 때가 많다. 처음에 가장 많이 떳던 오류는 NoSuchElementException였다. 아직 정확한 원인은 모르지만 nextToken으로 받은 후 값을 사용하지 않고 바로 nextToken을 사용하여 다른 값을 받으려고 하면 뜬다. 또 StringTokenizer는 무조건 '공백'으로만 입력받는다! 줄 단위로 입력받고 싶으면 그냥 readLine()을 바로 쓰면 된다. 추후에 다른 오류들을 만나며 더 알아봐야겠다. 이번에는 백준 2675번 문제를 풀던 중 다음과 같이 ArrayIndexOutOfBoundsException이 발생하였고 해석해보면 인덱스 1은 배열..
Java - 컬렉션 프레임워크
2022. 9. 19. 23:10
Java
주요내용 List인터페이스 Iterator Set인터페이스 Map인터페이스 hashing 컬렉션 문제풀이 컬렉션 여러 객체(데이터)를 모아놓은 것을 의미 컬렉션 프레임워크 컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식 다양한 클래스 제공 컬렉션 프레임워크의 핵심 인터페이스 인터페이스 특징 List 순서가 있는 데이터의 중복 혀용 Set 순서x,중복 허용x Map 키와 값의 쌍으로 이루어진 데이터의 집합 순서x,중복(키x,값o) List인터페이스 Arraylist 저장공간으로 배열을 사용 생성하기 위해서는 저장할 객체 타입을 매개변수, 즉 제네릭으로 표기하고 기본 생성자를 호출 ArrayList 객체명 = new ArrayList(초기 저장 용량); ArrayList container1 = ..
Java - 람다와 메서드 참조
2022. 9. 18. 00:49
Java
주요내용✔ 람다식 메서드 참조 람다식 함수(메서드)를 간략한 식으로 표현하는 방법 JDK 1.8 함수형 프로그래밍에서 이 기법을 도입하였다. 람다식의 규칙 1. 메서드의 이름과 반환타입을 제거하고 "->"을 블록{}앞에 추가 int max(int a, int b){ return a>b ? a:b; } //람다식 변형 (int a,int b) -> return a>b ? a:b; 2. 반환값이 있는 경우, 식이나 값만 적고 return문 생략 가능(끝에 ; 안붙임) (int a,int b) -> return a>b ? a:b; //람다식 변환 (int a,int b) -> a>b ? a:b 3. 매개변수의 타입이 추론 가능하면 생략가능(대부분의 경우 생략가능) (int a,int b) -> a>b ? a:..
Java-삼항연산자
2022. 9. 17. 23:47
Java
if문 사용시 코드라인이 길어지는 경우가 생긴다 이때 삼항연산자를 사용하면 간결하게 코드를 짤 수 있다. 삼항연산자 - (조건문) : ? 참 : 거짓 위 예제의 경우 괄호 안의 조건문이 참일 때 int a에 1이 , 거짓일 때 2가 담기게 된다. 그러나 삼항 연산자를 사용하였다고 컴파일 속도가 빨라지는 것은 아니며, 중복해서 여러번 사용할 경우 가독성이 떨어질 수 있으므로 주의해야 한다.