분류 전체보기 2430

[아이템 86] Serializable을 구현할지는 신중히 결정하라

클래스 인스턴스를 직렬화하기 위해서는 단순히 마커 인터페이스인 Serializable을 구현하면 됩니다.이처럼 너무 쉽게 적용할 수 있기 때문에 프로그래머가 특별히 신경 쓸 것이 없다는 오해가 생길 수 있지만 실제로는 직렬화를 적용하는 것은 아주 값비싼 일입니다. Serializable을 구현할 경우 릴리즈한 뒤에는 수정하기 어려움클래스가 Serializable 구현체일 경우 직렬화 형태인 바이트 스트림 인코딩도 하나의 공개 API가 됨자바는 하위 호환성을 지원하는 것을 추구하기 때문에 직렬화된 클래스가 널리 쓰이는 라이브러리에 포함될 경우 릴리즈 이후에는 직렬화 형태도 영원히 지원해야 함클래스의 private과 package-private 인스턴스 필드마저 API로 공개하는 꼴이 되어 객체지향의 핵심인..

JAVA/Effective Java 2024.05.12

[아이템 85] 자바 직렬화의 대안을 찾으라

자바 직렬화란?자바 객체를 바이트 스트림으로 변환하는 메커니즘객체를 파일에 저장하거나 네트워크를 통해 DB 혹은 메모리로 전송할 때 유용직렬화된 객체는 나중에 다시 역직렬화될 수 있어 객체의 상태를 보존하고 복원할 수 있음직렬화를 사용하기 위해서는 클래스가 Serializable 인터페이스 구현체여야 함직렬화된 객체는 ObjectOutputStream을 사용하여 생성된 출력 스트림으로 쓰이며 이를 통해 객체를 스트림에 쓰면 자동으로 필드 값들이 바이트로 변환되어 출력역직렬화는 직렬화된 객체를 읽어와서 자바 객체로 변환하는 것이며 이를 위해 ObjectInputStream을 사용직렬화를 통해 생성된 바이트 스트림은 플랫폼에 독립적이기 때문에 타 플랫폼에서도 역직렬화가 가능 자바 직렬화의 취약점앞선 설명만 ..

JAVA/Effective Java 2024.05.12

[Java] CompletableFuture

동시성 프레임워크 정리 글에서 언급했다시피 Future는 작업의 결과를 가져올 때까지 blocking 되고, 작업을 조합하거나 예외 처리하는 것이 어려웠습니다.이 문제를 해결하기 위해 자바 8에서 CompletableFuture가 등장했고 이번 게시글에서는 다음 내용을 간단히 정리해 보겠습니다.동기 vs 비동기CompletableFuture 개요CompletableFuture APIForkJoinPool 1. 동기 vs 비동기 1.1 동기(Synchronous)작업이 순차적으로 실행되며 한 작업의 시작과 완료가 다른 작업의 시작과 완료와 밀접하게 연결된 방식하나의 작업이 실행 중인 동안 다른 작업은 대기해야 함작업의 결과를 기다린 후 다음 작업이 진행작업은 한 번에 하나씩 진행하며 작업을 건너뛰거나 빠뜨..

JAVA/RxJava 2024.05.12

[Programmers] 상담원 인원

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/214288 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr reqs의 크기가 최대 300이고 상담원 배치 조합이 최대 15C5이기 때문에 브루트포스로 접근해도 되는 문제였습니다. 알고리즘은 다음과 같습니다. 1. 상담원을 배치할 수 있는 모든 조합을 구해줍니다. 2. 각각의 상담원 배치에 대해 기다린 시간의 합산을 구해줍니다. 2.1 자료구조는 시간을 기준으로 최소힙 배열을 선언하였고 각 유형의 상담원 인원수만큼 우선순위큐에 0을 넣어줬습..

[Programmers] 표현 가능한 이진트리

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/150367 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 해당 문제의 핵심은 서브 트리 내 루트가 반드시 1이어야 한다는 점입니다. 알고리즘은 다음과 같습니다.1. 주어진 십진수를 이진수로 변환한 뒤 포화이진트리 형태가 아니라면 포화이진트리 형태가 되도록 0을 추가해 줍니다.2. 1번에서 구한 이진수의 가운데를 시작으로 모든 서브 트리 내 루트 노드가 존재하는지 확인합니다.2.1 2번 조건이 성립하면 1, 성립하지 않으면 0을 answe..

[Programmers] 미로 탈출 명령어

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/150365 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 사전순으로 가장 빠른 경로를 구해야 하므로 그리디 하게 [d, l, r, u] 순으로 백트래킹하면 되는 문제였습니다.시간을 단축시키기 위해 현재 지점과 탈출 지점 사이의 맨해튼 거리를 구해 거리가 안될 경우 가지치기를 진행했습니다.  개발환경: Programmers IDE   지적, 조언, 질문 환영합니다! 질문 남겨주세요~

[Programmers] 등산코스 정하기

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/118669 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 다익스트라 알고리즘을 활용하여 풀 수 있는 문제였습니다.일반적인 다익스트라 알고리즘처럼 가중치를 더해나가는 것이 아니라 등산로 내 최대 가중치를 업데이트하는 방식으로 코드를 작성해야 했습니다.  개발환경: Programmers IDE   지적, 조언, 질문 환영합니다! 질문 남겨주세요~

[Programmers] 고고학 최고의 발견

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/131702?language=cpp 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 백준 14927번 전구 끄기와 비슷한 문제였습니다. 알고리즘은 아래와 같습니다.1. 첫 번째 행에 대해 모든 경우의 수를 구한 뒤2. 두 번째 행부터 바로 위 행의 시곗바늘을 12로 만들도록 처리합니다.3. 위와 같이 진행할 경우 1 ~ (N - 1)행의 시곗바늘은 모두 12를 바라보고 있습니다.3.1 따라서 마지막 행의 시곗바늘이 모두 12를 바라보고 있을..

백준 17837번 새로운 게임 2

문제 링크입니다: https://www.acmicpc.net/problem/17837 문제에서 주어진 대로 풀면 되는 문제였습니다.저는 같은 칸에 여러 개의 말이 위치할 수 있고 쌓인 순서를 토대로 로직이 달라질 수 있기 때문에 stack 자료구조를 사용하여 말이 쌓인 순서를 표현했습니다,. * moveDir[4]를 {1, 0}이 아닌 {0, 1}로 해놓고 맞왜틀 이러고 있었네요... 아까운 내 시간 개발환경:Visual Studio 2022 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

알고리즘/BOJ 2024.05.07