-
Q. 1981 자바 : 배열에서 이동
Q. 1981 자바 : 배열에서 이동 문제 : boj.kr/1981P5 난이도의 문제이다. 문제를 간단히 설명하자면그래프가 주어지고 1,1 ~ n,n까지 이동하려고 할 때, 거쳐간 수들 중 최댓값과 최솟값의 차이가 가장 작아지는 경우를 구하는 문제이다.처음에 이분 탐색과 BFS를 활용한 방식으로 풀었고 아래와 같이 풀었지만 틀렸다.1. 거쳐간 수들의 (최댓값-최솟값) = mid로 정의한다.2. BFS 방식으로 이동하며 mid가 가능한지 조회한다.3. 조건에 따라 이분탐색 방식으로 mid의 범위를 좁혀나간다이 방법은 잘못된 방식이었다.static boolean determination(int mid) { visit = new boolean[n][n]; Queue que = new ArrayDeq..
-
Q. 16566 자바 : 카드 게임
Q. 16566 자바 : 카드 게임 문제 : boj.kr/16566P5 난이도의 문제이다. 문제를 간단히 설명하자면카드 더미가 주어진다. 이 때 상대는 나와 동일한 카드 더미를 가진다.그리고 상대의 카드가 주어질 때 상대의 카드보다 크면서 이전에 낸 적 없는 가장 작은 카드를 출력하는 문제이다.먼저 완전 탐색 방식으로 푼다고 가정하면 아래와 같이 풀었을 것 같다.1. 상대의 카드보다 크면서 이전에 낸 적 없는 카드 중 가장 작은 카드를 카드 더미에서 찾는다.2. 사용한 카드는 사용했다고 처리한다.3. 1~2 과정을 반복한다. 이렇게 푼다면 낼 수 있는 카드를 찾을 때 N^2번의 연산이 생기고, 이전에 낸 적 없는 카드를 찾는데 최악의 경우 N번의 연산이 생기므로 총 N^3 * K의 시간복잡도를 가지게 된..
-
Q. 3197 자바 : 백조의 호수
Q. 3197 자바 : 백조의 호수 문제 : boj.kr/3197P5 난이도의 문제이다. 문제를 간단히 설명하자면얼음, 물, 백조가 있고, 물과 인접한 얼음은 시간이 지날 때 마다 물로 변한다.백조는 물이 있는 영역으로만 지나다닐 수 있을 때, 두 백조가 만날 수 있는 최소 시간은 몇초인지 구하는 문제이다.먼저 완전 탐색 방식으로 푼다고 가정하면 아래와 같이 풀었을 것 같다.1. 물 근처의 얼음을 완전탐색을 활용해 녹인다.2. 녹인 후 백조가 만날 수 있는지 계산한다.3. 만약 백조가 만날 수 없다면 1, 2번 과정을 반복한다. 이렇게 푼다면 R, C의 범위가 1500이므로 R^2 * C^2의 시간복잡도를 가지고,시간제한은 2초이므로 이 방법은 불가능해 보였다.그래서 완전 탐색이 아닌 다른 방법을 생각해..
-
DB Lock
최근 간단한 예약 서비스 과제를 진행하면서, JPA의 Lock을 직접 다뤄야 하는 상황이 생겼다. @Transactional만으로는 동시성 문제가 해결되지 않았고 비관적 락(Pessimistic Lock) 을 적용해 해결했다.이후 해당 내용에 대해 좀 더 자세히 알아보고자 글을 작성하게 되었다. 대표적으로 사용하는 DB중 하나인 MySQL 기준으로 작성할 예정이며 아래와 같은 순서로 작성하겠다. 1. DB Lock의 기본 개념2. Read Lock vs Write Lock3. 비관적 락 vs 낙관적 락4. 교착 상태5. ORM과 Lock (JPA)1. DB LockLock은 왜 사용해야 할까? 예를 들어 캐치테이블 같은 예약 앱을 생각해보자.여러 명의 유저가 동시에 예약을 시도했을 때, 누가 예약을 ..
인기글 + 내용
-
Springboot에서 ChatGpt연동하기Spring(boot) 2025.02.09 22:49
Springboot에서 외부 Api(ChatGpt)를 연동한 프로젝트를 만드는 방법에 대해 작성해보고자 한다. 1. 프로젝트 초기 환경 세팅2. OpenAI Docs를 보고 FeignClient를 활용해 Api 호출을 하여 사용하는 방법3. SpringAI를 사용해 연동하는 방법순서로 작성하겠다.0. OpenAi Api key 발급Chat GPT API 호출은 유료이다.먼저 외부 Api를 연동하기 위해서는 Api key 발급이 필요하다.https://platform.openai.com/api-keys 위 url에 들어가서 로그인(회원가입)을 한 뒤에 Create Api Key 버튼을 클릭한다.발급된 Api key는 다시 볼 수 없는 것 같아서 어딘가에 저장해 놓는 것을 추천한다. 1. 프로젝트 초기 환경..
-
99클럽 코테 스터디 29일차 TIL / MongoDB, Postgres, MariaDB 차이점항해99 2024.08.19 21:11
오늘의 학습 키워드 - CS공부한 내용 본인의 언어로 정리하기MongoDB / Postgres, MariaDB 차이 요약MongoDBNoSQL 문서 지향 데이터베이스로, 유연한 스키마와 수평적 확장을 지원하며, 비정형 데이터 처리에 적합MariaDBMySQL의 포크 버전인 관계형 데이터베이스로, 고정된 스키마와 ACID 트랜잭션을 지원하며, 웹 애플리케이션이나 전통적인 관계형 데이터 관리에 적합PostgreSQL고급 기능을 갖춘 관계형 데이터베이스로, ACID 트랜잭션, 복잡한 쿼리 처리, 다양한 확장 기능 등을 제공하며, 엔터프라이즈급 애플리케이션에 적합1. 데이터 모델MongoDBNoSQL DB, 문서 지향형DB데이터를 JSON 형식의 문서로 저장, 컬렉션(=테이블)에 여러 문서 저장데이터는 키-..
-
Q. 1981 자바 : 배열에서 이동백준_Java 2025.05.25 23:48
Q. 1981 자바 : 배열에서 이동 문제 : boj.kr/1981P5 난이도의 문제이다. 문제를 간단히 설명하자면그래프가 주어지고 1,1 ~ n,n까지 이동하려고 할 때, 거쳐간 수들 중 최댓값과 최솟값의 차이가 가장 작아지는 경우를 구하는 문제이다.처음에 이분 탐색과 BFS를 활용한 방식으로 풀었고 아래와 같이 풀었지만 틀렸다.1. 거쳐간 수들의 (최댓값-최솟값) = mid로 정의한다.2. BFS 방식으로 이동하며 mid가 가능한지 조회한다.3. 조건에 따라 이분탐색 방식으로 mid의 범위를 좁혀나간다이 방법은 잘못된 방식이었다.static boolean determination(int mid) { visit = new boolean[n][n]; Queue que = new ArrayDeq..
-
스택이 매우 커질 수 있다면 힙은 불필요할까?기타 2025.04.06 22:24
https://www.youtube.com/watch?v=9TSojdIr8Q0이 영상을 보고 "나라면 어떻게 답변했을까?" + 부족했던 점을 작성하고자 한다. 알고 있는 지식, ChatGPT와 더불어 이것 저것 찾아보겠지만 잘못된 내용이 있을 수 있습니다.잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다 :)나라면 어떻게 답변했을까? (잘못된 내용이 있습니다.)메모리 할당 영역은 Data, Stack, Heap 영역 이렇게 3가지가 있는 것으로 알고 있다. Data영역- 전역변수, static 변수 등이 존재Stack 영역- 고정 크기, 지역변수, 매개변수, 함수 리턴 주소가 존재Heap 영역- 동적 크기, 동적 할당 변수 존재 이정도로 배경지식이 있는 상태이다.그렇다면, 스택이 매우 커질 수 있다면..