전체 글

스파게티 코드라도 작성하고보자❗️
Backend/Database

JPA VS Mybatis

JPA VS MybatisJPA와 MyBatis는 데이터베이스와의 상호작용을 위한 두 가지 주요 프레임워크로, 서로 다른 철학과 사용 방식을 가지고 있다. JPA (Java Persistence Api)자바 ORM (Object-Relational Mapping)을 구현하는 표준 스펙. OOP 언어에서 사용하는 객체 모델과 RDB 테이블 간의 매핑을 자동으로 처리해준다.특징ORM: JPA는 객체와 데이터베이스 테이블 간의 매핑을 자동으로 처리. SQL을 직접 작성하지 않아도, 엔터티 클래스와 데이터베이스 테이블 간의 매핑 규칙을 기반으로 데이터를 저장하고 조회한다추상화: SQL 대신 JPQL(Java Persistence Query Language)을 사용하여 객체를 기반으로 쿼리를 작성한다자동 관리: ..

Backend/Docker

클라우드(Cloud), IaaS, PaaS, SaaS, 온프레미스

클라우드란?전 세계에 분산된 서버 네트워크를 통해 컴퓨팅 리소스를 이용할 수 있는 IT 환경클라우드를 이용하면, 인터넷을 통해 언제 어디서나 필요한 데이터, 애플리케이션, 컴퓨팅 리소스에 접속할 수 있다.클라우드 VS 클라우드 컴퓨팅 VS 클라우드 서비스클라우드 컴퓨팅(Cloud Computing): 클라우드를 이용하여 컴퓨팅 자원을 사용하는 기술적인 방법. 이는 서버, 스토리지, 네트워크 등의 자원을 가상화하여 사용자에게 제공하며, 필요에 따라 이를 확장하거나 축소할 수 있다.클라우드 서비스(Cloud Service): 클라우드 컴퓨팅을 기반으로 제공되는 서비스. 이는 다양한 형태로 제공될 수 있으며, 대표적으로는 SaaS(Software as a Service, 소프트웨어 기반 서비스), PaaS(P..

문제 풀이/알고리즘

[Softeer] 나무 섭지

문제 링크 : https://softeer.ai/practice/7726 사용 언어 : JAVA 아무튼 유령에게 잡히지 않고 남우가 탈출할 수 있다면 Yes, 못한다면 No를 출력 내 생각 초기 생각 유령은 필요에 따라 이동하지 않아도 되므로, 그냥 남우는 냅두고 최대한 빨리 탈출구로 가서 버티면 된다고 생각했다. 그래서 남우가_탈출구에_도착하는_시간(bfs) >= 유령이_탈출구에_도착하는_시간이라면 남우는 반드시 탈출 할 수 없을 것이라고 생각했다. MIN = 남우~출구까지의 최단 거리 for 유령: 유령들 min = Math.abs(유령.x - 출구.x) + Math.abs(유령.y - 출구.y) min **유령보다 먼저 도달할 수 있는 곳** // 만약 중간에 이동할 수 있는 곳이 없다면 탈출 실패..

CS/네트워크

[Network] 쿠키(Cookie), 세션(Session)이란?

쿠키와 세션의 이해를 돕기위해 아래의 상황을 확인해 보자. 얌념이는 네트워크 책을 사기 위해 자주 이용하는 온라인 서점 사이트에 접속했다. 로그인 창을 열자 자동 로그인 메시지가 떴고 얌념이는 저장된 아이디와 비밀번호로 로그인을 하였다. 원하는 책을 장바구니에 골라 담고 결제를 하려는 순간, 저녁 시간이 되어 얌념이는 저녁을 먹으러 갔다.저녁을 먹고 다시 돌아와 결제를 시도하자 로그인이 풀려 다시 로그인 페이지로 돌아갔다. 얌념이는 결국 다시 로그인을 하고 장바구니에 담긴 책을 결제하였다. 이 상황에서 어떤 것에 쿠키가 활용되고 세션이 활용되었을까? 쿠키 쿠키는 클라이언트, 브라우저의 로컬에 key-value 형태로 저장되는 데이터이다. 특징 브라우저의 로컬에 key-value 형태로 저장됨 유효기간이 ..

CS/알고리즘

[알고리즘] LCS(Longest Common Substring), 최장 공통 부분 수열 구현

LCS(Longest Common Substring) 정의 최장 공통 부분 수열. 주어진 여러 개의 수열의 부분 수열이 되는 수열들 중에 가장 긴 것을 찾는 문제이다. 백준의 이 문제를 보면 어떤 것인지 이해할 수 있다. (LIS: Longest Increasing Subsequence와 비슷하지만 다른 문제다) LCS는 항상 유일하지 않기 때문에 보통 길이를 묻는 문제가 나온다. 알고리즘 여러 문자열의 LCS를 효율적으로 구하기 위해서 DP가 사용된다. 두 문자열 사이의 LCS 길이를 저장하는 2차원 배열 LCS를 만들고, 아래와 같은 방식으로 배열을 채운다. X, Y 문자열 앞에 0을 넣는 이유는, i=1 || j=1일 때 Xi-1, Yj-1 값을 참조해야 할 수도 있기 때문에 만들어두는 것이다. 아..

문제 풀이/알고리즘

[Softeer] [21년 재직자 대회 예선] 회의실 예약

문제 링크 : https://softeer.ai/practice/6266 사용 언어 : JAVA 내 생각 초기 생각 처음에는 HashMap를 만들어서 회의 시간마다 true로 체크하고, 출력할 때 다시 계산하는 방식을 사용하려 했다. 그런데 회의실이 빈 start시간, end시간을 일일이 구하는게 너무 귀찮아서 다른 방식을 생각했다. 개선 회의가 (9-10), (12-13), (16-17) 이렇게 있다면, 회의실이 비어있는 시간대는 (10-12), (13-16), (17-18) 이렇게 된다. 아래의 (1)처럼 주어진 회의 시작/종료 쌍을 (2)처럼 변경하여 새로운 쌍을 짓는 것이다. (1) (회의1 시작, 회의1 종료) / (회의2 시작, 회의2 종료) / ... / (회의N 시작, 회의N 종료) (2)..

Backend/Django

django 설치 및 프로젝트 생성

가상환경 생성 및 활성화 virtualenv 설치 프로젝트 폴더 하나 생성 후 $ pip install virtualenv 가상환경 만들기 // python 3.7 이상 $ python -m venv myenv // python 3.7 이하 $ virtualenv myenv 가상 환경 활성화 $ source myenv/Scripts/activate 하면 하단에 (myenv)가 에코되면서 가상 환경 활성화가 완료된다. VSCode 인터프리터 선택 (반드시 가상 환경이 활성화된 상태에서 진행) ctrl+shift+p → python interpreter → ‘myenv’: venv 후에 터미널 창 (git bash) 열면 자동으로 가상 환경이 활성화된다. django 설치 $ pip install djang..

문제 풀이/알고리즘

[백준] (14500) 테트로미노

문제 링크 : https://www.acmicpc.net/problem/14500 사용 언어 : JAVA 내 생각 초기 생각 모든 N X M 칸을 돌면서 5가지 테트로미노를 모두 대조, 최댓값을 갱신한다. 근데 테트로미노의 블록들을 회전시키는 함수를 짜는게 까다로워서,, 그냥 회전으로 만들 수 있는 모든 모양을 2차원 배열로 만들어서 돌렸다. 그래서 이 정보를 담을 ArrayList 를 생성하고 수기로 열심히 넣어줌 코드는 아래와 같다. 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTok..

문제 풀이/알고리즘

[프로그래머스] (49191) 순위

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/49191 사용 언어 : JAVA 내 생각 초기 생각 처음에는 Topology Sort를 활용한 문제인 줄 알았는데 아무리 생각해도 정렬을 하고서 어떻게 순위를 계산할 방법이 떠오르지 않았다... 결국 구글 신의 도움을 받고, "플로이드 와샬"을 활용해야 한다는 것을 알게되었다. 적용 어떻게 플로이드 와샬을 사용할 수 있을까? 일단 2차원의 인접 배열을 만든다. 그리고 가중치를 세가지를 사용할 것인데, 각각 1, 0, -1이다. (사실 값은 중요하지 않고 세가지 상태를 나타낼 수 있으면 된다) array[A][B] == ? 1: A가 B를 이긴다 0: 알 수 없다. -1: A가 B에게 진..

문제 풀이/알고리즘

[프로그래머스] (86053) 금과 은 운반하기

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/86053 사용 언어 : JAVA 풀이 변수, 조건 정리 a : 신도시에 필요한 금 총량 b : 신도시에 필요한 은 총량 g[i] : i번째 도시가 가지고 있는 금 총량 s[i] : i번째 도시가 가지고 있는 은 총량 w[i] : i번째 도시가 트럭에 적재할 수 있는 최대 적재량 t[i] : i번째 도시에서 신도시까지 편도로 이동 시 걸리는 시간 각 도시에서 출발하는 모든 트럭은 동시에 운행할 수 있으며, 마지막까지 움직이는 트럭의 이동 시간까지만 구하면 된다. 아이디어 목표 금 a kg과 은 b kg을 전달할 수 있는 가장 빠른 시간을 구한다. 이럴 때 사용할 수 있는게 이분 탐색이다. 스무..

얌얌념념
얌얌 스파게티