VS Code 원격 개발 환경 구성: SSH 키로 원격 서버 접속하기
·
CS공부/인프라
이번에는 VS Code의 Remote - SSH 확장 기능을 사용하여,비밀번호 대신 SSH 키를 통해 원격 컴퓨터에 안전하고 편리하게 접속하는 방법을 단계별로 정리하였다.1. 왜 비밀번호 대신 SSH 키를 사용해야 할까?단순 비밀번호 입력 방식은 간단하지만 보안에 취약하다.SSH 키 인증은 비대칭 키 암호화를 기반으로 하여 보안성과 편의성을 동시에 제공한다.항목비밀번호 인증SSH 키 인증보안 수준낮음 (유출, 무차별 대입 공격에 취약)높음 (개인 키 없이는 접속 불가)편의성매번 입력 필요최초 1회 등록 후 비밀번호 없이 접속활용성수동 접속에 적합자동화, 반복 작업에 유리2. SSH 키 생성 (로컬 PC)터미널(Windows는 PowerShell 또는 Git Bash)에서 다음을 실행한다:ssh-keyge..
OAuth2 기반 Google & Kakao 로그인 구축 방법
·
CS공부/Java & Spring
✅ 사전 준비📌 공통Spring Boot (spring-boot-starter-oauth2-client)Redirect URI: https://yourdomain.com/login/oauth2/code/{provider}🧩 1. Google OAuth2 로그인 구축🔧 Google Cloud 설정Google Cloud Console 접속OAuth 동의 화면 구성 (앱 이름, 사용자 이메일 등)OAuth 2.0 클라이언트 ID 생성애플리케이션 유형: 웹 애플리케이션승인된 리디렉션 URI:https://yourdomain.com/login/oauth2/code/google클라이언트 ID, 클라이언트 시크릿 발급⚙️ application.yml 설정spring: security: oauth2: ..
백준 2615: 소형기관차(Java)
·
알고리즘
🚆 백준 2616번: 소형기관차🎯 문제 요약N개의 객차(1 ≤ N ≤ 50,000)가 수직선 상에 있다.각 객차에는 손님이 타고 있다 (최대 100명).소형 기관차는 최대 K칸까지 끌 수 있으며, 총 3대가 존재한다.3개의 소형 기관차가 서로 겹치지 않게 총합 손님 수가 최대가 되도록 운행할 때의 최대 손님 수를 구하라.🧠 문제 접근✅ 핵심 개념3개의 기관차가 끌 수 있는 객차를 비중복으로 선택 → 구간 합 최적화누적합 + DP 사용dp[i][j]: i번째 기관차까지 사용해서, j번째 객차까지 탐색했을 때 최댓값🔍 알고리즘 설계import java.io.*;import java.util.*;public class Main { public static void main(String[] args..
백준 2306: 유전자(Java)
·
알고리즘
🎯 목표주어진 DNA 문자열에서 KOI 유전자 조건을 만족하는 최장 유효 부분 문자열의 길이를 구한다.KOI 유전자 정의:at, gc는 KOI 유전자.KOI 유전자 X → aXt, gXc도 KOI 유전자.X, Y가 KOI 유전자 → XY도 KOI 유전자.✅ 핵심 아이디어DP[i][j]: i~j까지 KOI 유전자 중 최장 길이두 가지 전이 방식:경계 조건: (i,j) 가 a,t or g,c로 감싸진다면 → 내부 + 2분할 결합: dp[i][j] = max(dp[i][k] + dp[k+1][j])🧠 알고리즘 설계import java.io.*;import java.util.*;public class Main { static int[][] dp; static char[] dna; public..
백준 1557: 도로의 개수(Java)
·
알고리즘
✅ 문제 요약N×M 격자 도시에 도로가 건설됨.도로는 격자의 가로선 또는 세로선에 해당.일부 도로는 공사 중이므로 통행 불가.(0,0)에서 (N,M)까지 이동하는 경로의 수를 구하라.오른쪽 또는 아래쪽 방향으로만 이동 가능.🔍 알고리즘 설계DP[i][j] = (0,0)부터 (i,j)까지 가는 경로 수인접한 두 좌표 사이의 도로가 막혀있다면 그 방향으로 이동 불가.공사 중 도로는 (i1, j1, i2, j2)로 주어짐 → Set으로 관리.import java.util.*;public class Main { static int N, M; static long[][] dp; static Set block = new HashSet(); public static void main(Strin..
GitHub 대용량 파일 관리를 위한 Lens 사용법
·
CS공부/기타 CS지식
🎯 목표대용량 파일로 인한 GitHub 제한 해결Git 저장소의 용량 및 속도 문제 해결 Lens CLI를 통한 대체 Git LFS 관리대용량 파일을 별도 스토리지에 분리 관리✅ 왜 대용량 파일 관리가 필요한가?문제점설명Git 저장소 용량 한계GitHub는 기본적으로 파일당 100MB, 전체 1GB 저장소 제한이 있음커밋 내역 무거움바이너리/미디어 파일을 자주 커밋하면 기록이 빠르게 커짐클론/푸시 속도 저하저장소 크기가 커지면 협업 속도 저하🔗 이를 해결하기 위해 Git LFS 또는 대체 도구 Lens를 사용🔄 Git LFS의 한계GitHub에서 공식 지원하지만 무료 저장소는 용량/트래픽 제한이 있음1GB 저장, 월 1GB 트래픽 → 초과 시 유료 플랜 필요커스텀 파이프라인(CI/CD) 연동 어려..
백준 2248 - 이진수 찾기(Java)
·
알고리즘
🎯 문제 요약길이가 N인 이진수 중에서 1의 개수가 L 이하인 이진수들을 사전 순으로 정렬했을 때, K번째 이진수를 구하는 문제.🧠 문제 접근이 문제는 모든 이진수를 직접 만들어서 K번째를 찾기에는 비효율적핵심 아이디어는 조합을 이용해 가능한 경우의 수를 계산하며 자릿수를 결정🔍 알고리즘 설계✅ 조합 미리 계산comb[n][k] = nCk (n개 중 k개를 고르는 경우의 수)파스칼 삼각형을 활용하여 조합을 미리 계산합니다.for (int i = 0; i ✅ 자리수 별 분기i번째 자리를 '0'으로 채울 경우 → 나머지 자리에서 1이 L개 이하인 경우의 수 = comb[i - 1][0] + ... + comb[i - 1][L]만약 이 값보다 K가 작거나 같다면 현재 자리는 '0'아니라면 현재 자리는 '..
collect(Collectors.toList()) vs Stream.toList()
·
CS공부/Java & Spring
Java 16 이후, 자바에서는 Stream.toList()라는 새로운 메서드를 제공하여 기존의 collect(Collectors.toList()) 방식을 대체할 수 있게 되었습니다.✅ 핵심 차이점 요약항목collect(Collectors.toList())Stream.toList()도입 버전Java 8 이상Java 16 이상반환 타입ArrayList or other mutable list불변 리스트 (Immutable List)외부 라이브러리 의존필요 (Collectors)불필요변경 가능 여부가능 (mutable)불가능 (immutable)스레드 안정성불안정불안정 (불변이지만 thread-safe 아님)📌 예시 코드 비교1. Java 8 방식 - Collectors.toList()import java...
백준 10800번: 컬러볼 (Java)
·
알고리즘
🎯 문제 목표각 공은 색과 크기를 가진다.모든 공 쌍에 대해 서로 다른 색이면서 작은 공의 크기만큼 점수를 획득한다.각 공이 얻을 수 있는 총 점수를 출력한다.✅ 풀이 전략 요약Ball 객체 정의→ color, size, index를 저장하는 클래스 생성정렬 기반 누적합 알고리즘→ 공을 크기 기준으로 정렬하고, 같은 크기까지는 점수 계산을 미뤄둔다→ 누적합을 활용해 총합과 색상별 합을 미리 관리한다투 포인터→ 현재 공보다 작은 공들을 전부 포함시키는 방식으로 점수 누적색이 같은 경우 제외→ 같은 색의 합은 제외하여 점수 계산💡 핵심 개념변수의미total지금까지 본 공 중 크기가 현재 공보다 작은 공들의 전체 크기 합colorSum[color]특정 색상 공의 누적 크기 합result[i]i번 공이 얻을..
백준 2294: 동전2(Java)
·
알고리즘
💡 문제 요약n가지 종류의 동전을 가지고 있음각각의 동전은 중복해서 사용할 수 있음이 동전들을 이용해 총합이 k원이 되도록 할 때,필요한 동전의 최소 개수를 구하라 불가능한 경우 -1을 출력하라🧠 문제 분석전형적인 동전 최소 개수 DP 문제점화식 기반으로 1차원 DP 테이블을 구성하여 풀이🔍 알고리즘 설계1️⃣ DP 배열 정의 dp[j] = j원을 만들기 위한 최소 동전 개수 초기값: dp[0] = 0, 나머지는 INF (큰 값)2️⃣ 점화식 각 동전 금액 c에 대해dp[j] = min(dp[j], dp[j - c] + 1)3️⃣ 최종 정답 dp[k]가 INF이면 만들 수 없는 금액 → -1 출력 아니면 dp[k] 출력✅ 코드 구현 (Java)import java.io.*;import j..
백준 1167: 트리의 지름(Java)
·
알고리즘
💡 문제 요약트리 구조의 그래프가 주어진다.각 노드 간의 거리는 가중치가 있으며, 양방향이다.이 트리에서 가장 먼 두 정점 간의 거리, 즉 트리의 지름을 구하는 문제.🧠 핵심 개념트리의 지름(Tree Diameter): 트리에서 가장 긴 경로의 길이트리의 성질상, 임의의 노드에서 가장 먼 노드를 먼저 찾고,그 노드로부터 다시 DFS를 돌려 최대 거리를 구하면 그게 지름이다.🔍 알고리즘 설계1. 입력 파싱각 정점 번호와 연결된 정점 번호 및 거리를 입력 받음ArrayList[] graph를 사용하여 인접 리스트 구성(Node는 연결된 노드 번호와 거리 정보를 포함)2. 트리의 지름 구하기1️⃣ DFS 1차 임의의 노드(예: 1번)에서 가장 멀리 있는 노드를 찾음 이 노드를 farthestNode ..
문자열 클래스 정리: String vs StringBuffer vs StringBuilder
·
CS공부/Java & Spring
🎯 목표Java의 문자열 클래스 3가지를 이해합니다.각 클래스의 구조, 동기화 여부, 성능 차이를 비교합니다.상황에 맞는 문자열 클래스 선택 기준을 학습합니다.🔍 Java의 3가지 문자열 클래스구분StringStringBufferStringBuilder저장 영역Heap 또는 Constant PoolHeapHeap변경 가능 여부❌ 불변 (Immutable)✅ 가변 (Mutable)✅ 가변 (Mutable)Thread-Safe✅ Yes✅ Yes❌ No🔎 String 클래스✅ 특징불변 객체(Immutable): 문자열 수정 시, 새로운 객체 생성"+" 또는 concat() 사용 시 새로운 메모리 공간에 새 객체 생성예시:String a = "hello";String b = a + "world"; // a..