반응형
[프로그래머스] 사칙연산 (Java, DP, lv4)
알고리즘/동적 프로그래밍2024. 7. 24. 12:15[프로그래머스] 사칙연산 (Java, DP, lv4)

문제 출처https://school.programmers.co.kr/learn/courses/30/lessons/1843# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이- 동적 프로그래밍 (dynamic progamming)- bottom-up 방식 풀이  이 문제에서 주의할 점은 사칙연산에서 +는 결합 법칙이 성립하지만, -는 결합법칙이 성립하지 않는다는 부분이다 그렇기 때문에 각 구간별 최대값, 최소값을 구한 후 경우의 수를 고려해야 한다 출처. 나무 위키한 식에서 연산이 두 번 이상 연속될 때, 앞쪽의 연산을 먼저 계산한 값과 뒤쪽의 연산을 ..

[Spring Boot] Simple Cache, EhCache(v3.10.8) 간단 테스트 해보기
공부/Spring2024. 7. 22. 15:31[Spring Boot] Simple Cache, EhCache(v3.10.8) 간단 테스트 해보기

캐시란?- 데이터나 값을 미리 복사해놓는 임시 저장소- 시스템 성능을 향상시키기 위한 메커니즘 - 캐시에 데이터를 저장하고 엑세스하는 프로세스이다 캐시를 사용해야 하는 이유① 데이터 접근이 빠르고 비용이 저렴② 애플리케이션 성능이 향상됨③ 응답이 빠름④ 메모리에 데이터 접근하는게 DB에서 가져오는 것보다 항상 빠름⑤ 비용이 많은 백엔드 요청이 줄어듦 캐시에 데이터를 미리 복사해 놓음으로써 처리/접근 시간(비용) 없이 빠른 속도로 데이터 접근할 수 있다 언제 사용- 자주 변경되지 않는 데이터- 원본 데이터에 접근/처리 시간이 오래 걸리는 경우 캐싱 종류 ① 인메모리 캐싱 (ex. Redis)② 데이터베이스 캐싱 (ex. hibernate 1차 캐시)③ 웹 서버 캐싱 - HTTP Cache : 브라우저/프록..

[Java] TreeSet 주요 메소드 살펴보기
알고리즘/자료구조2024. 5. 8. 15:12[Java] TreeSet 주요 메소드 살펴보기

TreeSet ? - Java Collection Framework 제공하는 자료구조- 이진 탐색 트리(binary search tree)로 구현 - 시간복잡도 : O(logN)  (HashSet의 경우 O(1))- 범위 탐색과 정렬에 유리 - Collection, Set 에서 제공하는 기본 메소드 또한 사용 가능- 중복 허용 X- null 허용 X (NPE 발생)- 정렬 기준의 경우 객체의 Comparable이나 TreeSet 생성자에 Comparator 초기화하여 사용- thread-safe 하지 않다 생성자- 내부적으로 Map 자료 구조를 사용하고, 아래와 같이 생성자를 제공한다 - 인자가 없는 기본 생성자를 사용할 경우 TreeMap으로 생성된다private transient NavigableMa..

[개발도서]프로그래머 열정을 말하다 (채드 파울러)
독서/📚2024. 5. 2. 11:33[개발도서]프로그래머 열정을 말하다 (채드 파울러)

목차에서* : 다시 읽어 보고 싶은 장** : 스스로 개선 되었으면 싶은 장 3장_코딩만으로는 이제 충분하지 않다이제 자신의 시간을 투자할 사업 분야에 대해 생각할 시간이다. 실천하기1. 비즈니스 담당자와 점심 약속을 잡으라. 담당자들이 일을 어떻게 하는지 이야기를 나누라. 일과 대해 자세히 질문하라. 이야기 나누는 동안 그 일을 하고 싶은 포부가 생기면 무엇을 배워야 하는지, 무엇을 바꿔야 하는지 질문하라. 기술이 그들의 일에 도움이 됐는지(또는 일을 더디게 했는지) 이야기를 나누라. 그리고 이 일을 정기적으로 하라. 2. 회사 업무와 관련된 업계 잡지를 고른다. (..) 회사에는 대부분 업계 잡지 과월호 모음이 있다. 잡지를 하나하나 읽이 시작하라. 모든 내용을 이해할 수는 없겠지만 꾸준히 읽도록 한..

[넥스트스탭] 블랙잭 - 자바 플레이 그라운드
공부/Java2024. 4. 30. 17:11[넥스트스탭] 블랙잭 - 자바 플레이 그라운드

깃 저장소학습 전https://github.com/ljw1126/my-java-blackjack-playground/tree/exercise-blackjack/src/main/java/nextstep/blackjack 학습 후https://github.com/ljw1126/my-java-blackjack-playground/tree/practice/src/main/java/nextstep/blackjack어려웠던 부분 - 클래스 책임을 제대로 처리하지 못하여, 로직이 분산되어 코드를 읽기 힘들었음- 테스트시 딜러와 플레이어가 가진 패를 초기화하는 방법을 생각지 못해 헤매었슴- 블랙잭 게임에 대한 이해 부족 (=요구사항 이해 부족)특히나 블랙잭 게임의 승패 판정할 때 딜러와 플레이어간의 1:1 비교를 이해..

[넥스트스탭] 좌표계산기 - 자바 플레이 그라운드
공부/Java2024. 4. 30. 17:11[넥스트스탭] 좌표계산기 - 자바 플레이 그라운드

깃 저장소https://github.com/ljw1126/my-java-coordinate-playground/tree/practice/src/main/java복습 - 좌표 계산기 (선, 사각형, 삼각형)[요구사항]① 사용자가 점에 대한 좌표 정보를 입력한다② 좌표 정보는 괄호로 둘러쌓여 있으며, 쉼표(,) 로 x/y값을 구분한다 [예시]선의 경우 (10,10)-(14,15)사각형의 경우 (10,10)-(22,10)-(22,18)-(10,18)삼각형의 경우 (10,10)-(14,15)-(20,8)③ x, y 좌표 값의 범위는 1 ~ 24 이다④ 입력 범위를 초과할 경우 에러 문구를 출력하고 다시 입력을 받는다⑤ 정상적인 값을 입력한 경우, 콘솔에 2차원 그래프와 결과값을 출력한다 [결과]선의 경우 두 점..

[넥스트스탭] 자동차 경주 게임 - 자바 플레이 그라운드
공부/Java2024. 4. 30. 17:11[넥스트스탭] 자동차 경주 게임 - 자바 플레이 그라운드

깃 저장소학습 전https://github.com/ljw1126/my-java-racingcar-playground/tree/myself/src/main/java 학습 후https://github.com/ljw1126/my-java-racingcar-playground/tree/practice/src/main/java복습 - 자동차 경주 게임[기능 요구사항]① 각 자동차에 이름을 부여할 수 있다. (이때 자동차 이름은 5자를 초과할 수 없다)② 자동차 이름은 쉼표(,)를 기준으로 구분한다③ 전진하는 조건은 0에서 9사이에서 random값을 구한 후 값이 4이상인 경우이다④ 게임 종료 후 우승자를 출력한다. (이때 우승자는 한명 이상일 수 있다) [실행 결과]경주할 자동차 이름을 입력하세요(이름은 쉼표(,..

[넥스트스탭] 숫자 야구 게임 - 자바 플레이 그라운드
공부/Java2024. 4. 30. 17:11[넥스트스탭] 숫자 야구 게임 - 자바 플레이 그라운드

강의 링크 https://edu.nextstep.camp/c/9WPRB0ys/ 플레이그라운드 edu.nextstep.camp깃 허브 저장소학습 전https://github.com/ljw1126/my-java-baseball-playground/blob/myself/src/main/java 학습 후https://github.com/ljw1126/my-java-baseball-playground/tree/practice/src/main/java학습 전 직접 작성한 코드 (펼처보기)반성)① 객체 지향적 언어를 사용하면서도, 거리가 먼 절차적 코드를 작성② 절차적 코드로 인해 한 눈에 로직을 파악하기 힘듦 (가독성 저하)③ 테스트 코드 미작성④ 클래스 미분리 - view, model, controller⑤ 의미..

[BOJ2211] 네트워크 복구 (최단 경로, 다익스트라, 그래프)
알고리즘/최단 경로2024. 3. 12. 21:51[BOJ2211] 네트워크 복구 (최단 경로, 다익스트라, 그래프)

문제 링크 https://www.acmicpc.net/problem/2211 2211번: 네트워크 복구 첫째 줄에 두 정수 N, M이 주어진다. 다음 M개의 줄에는 회선의 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 컴퓨터와 B번 컴퓨터가 통신 시간이 C (1 ≤ C ≤ 10)인 회선으로 연결되어 있다 www.acmicpc.net 문제 풀이 - 다익스트라 + 백트래킹 - 양방향 그래프 - N(노드) 최대 1,000, C (비용) 최대 10 이므로 최대치는 10,000이므로 int로 처리가능 - 루트 노드가 1번일 때, 다른 노드를 모두 연결하기 위해서는 N - 1개의 간선이 필요하다 (트리 생각하기!) - 최단 경로를 갱신하면서 parent 배열에 이전 노드에 대한 정보 기록 (pare..

[Java] PriorityQueue(우선 순위 큐) 분석하고, 따라 구현해보기
알고리즘/자료구조2024. 2. 12. 22:03[Java] PriorityQueue(우선 순위 큐) 분석하고, 따라 구현해보기

우선 순위 큐 (Priority Queue)최소 혹은 최대값을 효율적으로 찾을 수 있는 자료 구조 - 시간 복잡도 :  O( log₂N) - 힙(완전 이진 트리) 자료 구조 기반 구현  - (사전에 정렬할 필요 없이) 데이터 삽입/삭제 시 우선 순위에 따라 빠르게 접근/삭제 가능하다① 최소 힙 : 부모 노드 ≤ 자식 노드 ② 최대 힙 : 부모 노드 ≥ 자식 노드 참고. 부모-자식 인덱스 구하는 공식루트가 0번 인덱스부터인 경우① 부모 노드 = (현재 노드 - 1) / 2② 왼쪽 자식 노드 = (부모 노드 * 2) + 1③ 오른쪽 자식 노드 = 왼쪽 노드 + 1   구현해보기java.util.PriorityQueue 에서 간단하게 필요한 부분만 추출하였다public class MyPriorityQueue ..

[Java] Queue (By ArrayDeque) 따라 구현해보기
알고리즘/자료구조2024. 2. 12. 20:26[Java] Queue (By ArrayDeque) 따라 구현해보기

ArrayDeque 클래스 특징① 자바 1.6 추가② 내부적으로 가변길이 배열(Resizable-array)로 데이터 관리, 용량 제한 없음③ Thread-safe 하지 않음④ Null element 금지⑤ Stack 으로 사용할시 Stack 클래스 빠르고, Queue로 사용할 시 LinkedList 클래스보다 빠르다This class is likely to be faster than Stack when used as a stack, and faster than LinkedList when used as a queue.  ArrayDeque를 Queue로 활용하는 경우 아래의 네가지 장점을 생각해 볼 수 있다① 더 높은 성능 지원 - 내부적으로 배열을 사용하여 큐를 구현하기 때문에 빠른 접근 시간을 제공..

[Java] Stack (By ArrayDeque) 따라 구현해보기
알고리즘/자료구조2024. 2. 12. 19:40[Java] Stack (By ArrayDeque) 따라 구현해보기

ArrayDeque 클래스 특징① 자바 1.6 추가② 내부적으로 가변길이 배열(Resizable-array)로 데이터 관리, 용량 제한 없음③ Thread-safe 하지 않음④ Null element 금지⑤ Stack 으로 사용할시 Stack 클래스보다 빠르고, Queue로 사용할 시 LinkedList 클래스보다 빠르다This class is likely to be faster than Stack when used as a stack, and faster than LinkedList when used as a queue. - 공식 doc  참고. Stack 클래스 단점자바 1.0에 추가되었고, Vector 클래스를 상속받고 있다 -- LIFO (Last In First Out) - 멀티 스레드 환경에서..

[Next Step] 12장 확장성 있는 DI 프레임워크로 개선
독서/📚2023. 11. 23. 13:50[Next Step] 12장 확장성 있는 DI 프레임워크로 개선

12.1 필드와 setter 메소드에 @Inject 기능 추가현재 생성자 주입만 가능한데, @Inject를 활용해서 필드(field), setter 메소드를 통해서도 DI를 할 수 있도록 기능을 추가한다 필드와 생성자 주입@Service public class MyQnaService { private UserRepository userRepository @Inject private QuestionRepository questionRepository; @Inject public MyQnaService(UserRepository userRepository) { this.userRepository = userRepository }} setter 주입@Controllerpublic cla..

[Next Step] 11장 의존관계 주입(DI)을 통합 테스트 하기 쉬운 코드 만들기
독서/📚2023. 11. 21. 14:03[Next Step] 11장 의존관계 주입(DI)을 통합 테스트 하기 쉬운 코드 만들기

11.1 왜 DI가 필요한가?의존관계란 객체 혼자 모든 일을 처리하기 힘들기 때문에 내가 해야 할 작업을 다른 객체에게 위임하면서 발생한다.즉, 내가 가지고 있는 책임과 역할을 다른 객체에 위임하는 순간 발생하는 것이다. (중략..)DI는 객체 간의 의존관계를 어떻게 해결하느냐에 따른 새로운 접근 방식이다.지금까지 우리는 의존관계에 있는 객체를 사용하기 위해 객체를 직접 생성하고, 사용하는 방식으로 구현했다. (중략..)이 같은 방식으로 구현할 경우 유연한 개발을 하는데 한계가 있기 때문에 인스턴스를 생성하는 책임과 사용하는 책임을 분리하자는 것이다.(중략..)이처럼 객체 간의 의존관계에 대한 결정권을, 의존관계를 가지는 객체가 가지는 것이 아니라 외부의 누군가가 담당하도록 맡겨 버림으로써 좀 더 유연한..

[Next Step] 10장 새로운 MVC 프레임워크 구현을 통한 점진적 개선
독서/📚2023. 11. 20. 21:44[Next Step] 10장 새로운 MVC 프레임워크 구현을 통한 점진적 개선

목표✨ (p338)① 레거시 MVC프레임워크와 애노테이션 기반의 새로운 MVC 프레임워크가 동시에 서비스 가능하도록 구현② 인터페이스로 추상화 가능한 부분을 찾아 2개의 프레임워크가 공존 가능하도록 리팩토링 수행  10.1 MVC 프레임워크 요구사항 3단계10.1.1 요구사항 (p335) 아래 RequestMapping 코드를 보면 직접 요청 URL과 컨트롤러를 추가 해야 하는 불편함이 있다. 서블릿과 같이 애노테이션을 활용해 설정을 추가하고 서버가 시작할때 자동으로 매칭되도록 개선해 본다. (힌트: @Controller 애노테이션을 추가하고, 자바 리플렉션을 활용) 10.1.2 자바 리플렉션(p340)Hint① java.lang.Class API의 getConstructors(), getMethods(..

[Next Step] 9장 두 번째 양파 껍질을 벗기기 위한 중간 점검
독서/📚2023. 11. 18. 21:33[Next Step] 9장 두 번째 양파 껍질을 벗기기 위한 중간 점검

실습 프로젝트 저장소실습의 경우 처음에 fork 받았는데, 깃 허브 잔디가 심어지지 않아 기술 블로그 참고(링크)하여 저장소 설정을 변경하도록 함 jwp-basic https://github.com/slipp/jwp-basic/tree/step7-self-check GitHub - slipp/jwp-basic: 자바 웹 프로그래밍 기본 실습자바 웹 프로그래밍 기본 실습. Contribute to slipp/jwp-basic development by creating an account on GitHub.github.com자체 점검 요구사항(필수)① 로컬 개발 환경에 톰캣 서버를 시작하면 서블릿 컨테이너의 초기화 과정을 설명하라 (아래 참고) ② 로컬 개발환경에서 톰캣 서버를 시작한 후 http://loc..

[Next Step] 8장 Ajax를 활용해 새로고침 없이 데이터 갱신하기
독서/📚2023. 11. 17. 18:31[Next Step] 8장 Ajax를 활용해 새로고침 없이 데이터 갱신하기

실습 프로젝트 저장소실습의 경우 처음에 fork 받았는데, 깃 허브 잔디가 심어지지 않아 기술 블로그 참고(링크)하여 저장소 설정을 변경하도록 함 jwp-basic https://github.com/slipp/jwp-basic/tree/step4-qna-getting-started GitHub - slipp/jwp-basic: 자바 웹 프로그래밍 기본 실습자바 웹 프로그래밍 기본 실습. Contribute to slipp/jwp-basic development by creating an account on GitHub.github.com 8장 AJAX를 활용해 새로고침 없이 데이터 갱신하기- 이번 장에서는 질문 목록/상세, 답변 목록/생성/삭제 화면 및 기능 구현 후 리팩토링을 수행한다- 책에는 없는 내..

[Next Step] 7장 DB를 활용해 데이터를 영구적으로 저장하기
독서/📚2023. 11. 17. 11:24[Next Step] 7장 DB를 활용해 데이터를 영구적으로 저장하기

실습 프로젝트 저장소실습의 경우 처음에 fork 받았는데, 깃 허브 잔디가 심어지지 않아 기술 블로그 참고(링크)하여 저장소 설정을 변경하도록 함 jwp-basic https://github.com/slipp/jwp-basic/tree/step2-user-with-mvc-framework GitHub - slipp/jwp-basic: 자바 웹 프로그래밍 기본 실습자바 웹 프로그래밍 기본 실습. Contribute to slipp/jwp-basic development by creating an account on GitHub.github.com  자바 진영은 데이터베이스에 대한 접근 로직 처리를 담당하는 객체를 별도로 분리해 구현하는 것을 추천한다. 이 객체를 DAO(Data Access Object)라..

반응형
image