728x90

전체 글 161

Access Token과 Refresh Token의 저장 위치

1년 전에 한참 졸업 프로젝트, 창업동아리 활동을 하면서 세션 기반 로그인, JWT 기반 로그인, Access Token과 Refresh Token의 개념을 공부했었다. 오늘 자율 프로젝트에서 로그인 기능을 맡아 오랜만에 다시 생각나서 정리해본다ㅎㅎ 우선, 웹은 본질적으로 무상태(stateless)로 동작하기 때문에 이런 로그인 과정이 필요한 것이다. HTTP 프로토콜 자체가 무상태(stateless)하기 때문에 서버는 클라이언트의 각 요청을 독립된 요청으로 처리한다. 즉, 사용자의 인증 정보를 확인할 방법이 필요하며 이러한 방법들이 세션 기반 로그인, JWT 기반 로그인인 것이다. 세션 기반 로그인 방식은 클라이언트에는 세션 ID만 저장하고 서버에 중요한 사용자 정보를 저장한다. 세션 ID 자체에는 중..

📕CS 2024.10.28

[TypeScript]TypeScript 이해하기(1) - 타입 집합 / 추론 / 단언

✨타입과 집합 타입은 여러 개의 값을 포함하는 집합으로 생각할 수 있다. 그리고 타입 간에는 서로 포함 관계(슈퍼-부모 타입, 서브-자식 타입)이 존재한다. ✔타입 호환성A와 B 두개의 타입이 존재할 때 A 타입의 값을 B 타입으로 취급해도 괜찮은지 판단하는 것업캐스팅: 서브 타입의 값을 슈퍼 타입의 값으로 취급하는 것 ✔다운캐스팅: 반대로 슈퍼 타입의 값을 서브 타입의 값으로 취급하는 것 ✖→ 집합의 포함 관계처럼 업캐스팅은 모든 상황에 가능하지만, 다운 캐스팅은 대부분의 상황에 불가하다. ✔Unknown(전체 집합)모든 서브 타입을 부분집합으로 갖는 전체 집합으로 unknown 타입 변수에 모든 타입의 값을 할당할 수 있다. 반대로 unknown 타입의 값은 any를 제외한 어떠한 타입의 변수에도 할..

💻웹(Web)/React 2024.09.04

[TypeScript]TypeScript의 개요 및 기초

📌TypeScript 개요 및 기초✨TypeScript 개요TypeScript란 어떤 언어인가?TypeScript란 JavaScript를 더 안정적으로 사용할 수 있도록 Type이라는 안전장치를 추가한 확장판 JavaScript라고 할 수 있다.※참고: tsconfig.js → TypeScript의 컴파일러 옵션 파일이다.※참고: tsconfig.js → TypeScript의 컴파일러 옵션 파일이다.  ✨TypeScript의 원시타입: number, string, boolean, null, undefinedTypeScript의 원시타입인 Type number, string, boolean, null, undefined에 대해 TypeScript를 사용하는 방법은 다음과 같다.// type 주석 또는 t..

💻웹(Web)/React 2024.09.03

[알고리즘]백준 4991: 로봇 청소기

해결방법최단 경로를 구해야하므로 BFS를 사용한다.이때, visited를 3차원으로 만들어야 한다. 더러운 칸을 방문하는 순서를 고려해야 하기 때문이다. → visited배열을 3차원으로 관리해야한다. → 비트마스킹을 사용해야 한다.그래프를 모두 순회했음에도 답을 구하지 못한 경우는 방문할 수 없는 더러운 칸이 존재하는 것이므로 -1를 출력한다.모두 방문: curD==((1방문 처리: curD | (1 코드import java.util.*;import java.io.*;// 396ms// BFS + 비트마스킹 + dppublic class Main_4991_G1_로봇청소기_BFS비트마스킹 { static int h,w; // w: 방의 가로크기, h: 방의 세로 크기 static char[][..

알고리즘/백준 2024.08.24

[알고리즘]백준 6087: 레이저 통신

해결방법3차원 visited 배열이 문제 풀이의 핵심이라고 생각한다.visited[r][c][i]는 (r, c) 위치에 도달했을 때, 방향 i(상, 하, 좌, 우 중 하나)로 이동한 경우에 사용된 거울의 수이다. 이때, visited가 3차원이어야 하는 이유는 같은 (r,c)라도 레이저가 상,하,좌,우 어느쪽에서 들어왔는지에 따라 다음 위치로 이동할 때 필요한 거울의 수가 달라질 수 있기 때문이다.따라서 BFS + 3차원 방문처리를 통해 풀었고, O(W*H)로 풀 수 있다. 코드import java.util.*;import java.io.*;public class Main_6087_G3_레이저통신 { static int H,W; static char[][] map; static List point; st..

알고리즘/백준 2024.08.24

[알고리즘]백준 9935: 문자열 폭발

해결 방법먼저, 전체 문자열에서 폭발 문자열을 찾고 다시 문자열을 이어붙여 탐색하는 풀이가 떠오른다. 최악의 경우 전체 문자열의 길이가 N, 폭발 문자열의 길이가 1d일때, N*(N-1)(N-2)…*1의 연산이 필요하다. 즉, O(N^2)이 되어 시간초과가 발생할 것이다. 그래서 스택을 사용해서 O(N)으로 문제를 해결해야 한다. 코드import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Stri..

카테고리 없음 2024.08.18

[알고리즘]백준 2206: 로봇 조종하기

해결 방법완전 탐색으로 접근하면 시간 초과가 발생한다. 한 지점에서 3방향으로 이동할 수 있고, 지점이 NM개 있으므로 O(3^(NM))의 시간복잡도가 소요되기 때문이다.첫 번째 행의 경우 오직 왼 → 오 방향만 가능하므로 따로 계산해주고 두 번째 행부터는 왼 → 오 / 오 → 왼을 비교해주어야 한다. 즉, 이전 단계의 최적 결과를 바탕으로 다음 단계에서의 최적 결과를 구해야하므로 DP로 접근한다고 볼 수 있다. 따라서 O(N*M)의 시간복잡도로 해결할 수 있다. 코드import java.util.*;import java.io.*;public class Main { static int MIN_VAL = -987654321; static int N,M; // (1≤N, M≤1,000) st..

알고리즘/백준 2024.08.18

[알고리즘]백준 1976: 여행 가자

해결방법서로소 집합을 통해 여행 계획인 도시들의 대표자가 모두 같으면 “YES”, 하나라도 다르다면 “NO”를 출력한다.서로소 집합시에 경로 압축 + 랭크 기반 유니온을 사용하면 find 및 union시 거의 상수시간이 소요되므로 O(N+M)의 시간복잡도로 해결할 수 있다. 코드import java.util.*;import java.io.*;// 160ms, Disjoint Setpublic class Main_1976_G4_여행가자_서로소집합 { static int N; // N: 도시의 수 static int M; // M: 여행 계획에 속한 도시들의 수 static int[][] graph; static int[] plan; static int[] parents; s..

알고리즘/백준 2024.08.16

[알고리즘]백준 1863: 스카이라인 쉬운거

해결방법스택을 이용하여 문제를 O(N)의 시간 복잡도로 해결할 수 있다.핵심은 스택에 자신보다 작은 높이만 유지해야 한다.현재 높이를 스택의 peek() 값과 비교하여, 만약 peek() 값이 현재 높이보다 크다면, 스택에서 해당 값을 pop() 한다. 이때 pop()할 때마다 정답을 증가시킨다.스택에 값을 넣을 때는 다음 조건을 확인한다.현재 높이가 0이 아닌 경우스택의 peek() 값이 현재 높이와 다른 경우 코드import java.util.*;import java.io.*;// 216ms, 스택, O(N)public class Main_1863_G4_스카이라인쉬운거_스택 { public static void main(String[] args) throws IOException{ ..

알고리즘/백준 2024.08.16

[알고리즘]백준 2668: 숫자 고르기

해결방법뽑힌 정수들의 idx들의 집합 = 뽑힌 정수들의 집합을 동일하게 만들어야 한다.감이 잘 안 잡혀서 풀이를 먼저 읽었는데 ^^ ..뽑힌 숫자들의 특징은 싸이클을 이루는 숫자들이라고 한다.문제에서 주어진 숫자들을 예시로 보면1 → 3 → 13 → 1 → 35 → 5따라서 dfs를 통해서 target(처음 시작 인덱스)를 만나면 정답배열에 넣어주도록 코드를 작성하면 되고, O(N^2)의 시간복잡도로 문제를 해결할 수 있게 된다. 코드import java.util.*;import java.io.*;// DFS, O(N^2)public class Main_2668_G5_숫자고르기_DFS { static int N; static boolean[] visited; static int[] num..

알고리즘/백준 2024.08.14
728x90