전체 글

글 헤더 커스텀하기 커스텀 하기 전 글 헤더는 본문 글에 사진이 있으면 블러처리 된 사진이 헤더에 생겼었다. 내가 원하는건 오른쪽 사진과 같이 커스텀하고 싶었다  hELLO 스킨 커스텀 시작 먼저 스킨 편집에 들어가서 html 편집에 들어간다.  기존 태크를 삭제하거나 주석처리하고 아래 코드로 바꿔준다. 기존 태그 · 수정삭제  커스텀한 태그와 CSSdiv.header-thumbnail { width: 130px; height: 130px; border-radius: 999px; overflow: hidden; box-shadow: 0px 0px 5px #444}img.header-thumbnail {..
JWT(JSON Web Token)란? jwt는 인증에 필요한 정보들을 암호화 시킨 JSON 토큰을 의미한다.따라서 JWT를 이용한 인증은 유저를 인증하고 식별하기 위한 Token 기반 인증이다.JWT는 JSON 데이터를 Base94 URL-safe Encode를 통해 인코딩하여 직렬화한 것이고,토큰 내부에는 개인키를 통한 전자 명이 들어있다.Base64 URL-safe Encode란? 일반적인 Base64 Encode 를 URL에서 오류 없이 사용하도록 '+' 와 '/'를 각각 '-', '_'으로 표현한 것이다. 토큰 기반 인증에서 토큰은 토큰 자체에 사용자 정보들이 포함되어 있다는 점(self-contained)이 특징이다. 클라이언트의 상태를 알아야했던 stateful했던 환경에서 JWT를 사용하게..
Authentication vs Authorization Atuhentication: 인증Authorization: 권한 부여 웹 사이트에 로그인 하는 것을 Authentication이라고 한다. 한번 로그인을 한 후에는 로그인 상태가 유지되어야 한다.이 유지하는 역할을 하는 것이 Authorization이다. 권한 부여를 통해 로그인 상태의 사용자만 사용할 수 있는기능을 사용할 수 있게 한다.어떤 요청마다 로그인을 할 수 없는 노릇이니 로그인 상태를 유지시키는 기술이 필요하다-> 여기서 세션이나 JWT 활용  대표적으로 사용자의 인증/인가를 처리할 때 사용하는 방식은 다음과 같이 3가지가 있다쿠키 방식세션 방식JWT 토큰 방식쿠키 클아이언트가 인증정보 관리 (stateless)쿠키 인증 방식은 쿠키에 ..
· 알고리즘
동적 계획법이란? 크기가 크거나 복잡한 문제를 효율적으로 풀기위해 작거나 간단한 어러개의 문제로 나눠서 푸는 방법으로, 그리디 알고리즘과 같이 최적화 문제를 해결하는 알고리즘이다.입력 크기가 작은 문제들을 해결한 후에 그 해들을 이용하여 보다 큰 크기의 부분 문제들을 해결하고, 최종적으로 원래 주어진 입력의 문제를 해결하는 알고리즘 설계기법으로 프로그램 성능의 향성을 기대할 수 있다.피보나치 수를 구하는 함수에 DP알고리즘 적용하기 문제를 부분 문제로 분할fibonacci(0) = 0, fibonacci(1) = 1fibonacci(n) =  fibonacci(n-1) + fibonacci(n-2) (n>=2) 가장 작은 부분 문제부터 해를 구한다.부분문제들의 해를 테이블에 저장하고 이를 이용하여 상위 ..
· 알고리즘
Memoization 이란동일한 계산을  반복적으로 해야할 때, 이전에 계산한 값을 메모리에 저장하여 중복적인 계산을 제거하여 전체적인 실행 속도를 빠르게 해주는 기법으로 동적 계획법(DP, Dynamic Programming)의 핵심이 되는 기술. 피보나치수열로 알아보는 재귀과 memoizationhttps://mystudylog.tistory.com/72  [파이썬] 10870 피보나치 수 5처음에 재귀함수로 풀이 하지만 재귀함수로 하면 겹치는 계산이 존재해서 다른 풀이도 찾아보았다. import sys def fibo(n): if n == 0: return 0 elif nmystudylog.tistory.comdef fibo_memo(n): global memo if n >= len(memo)..
접근 방법2차원 배열에 입력을 저장하고 더하자.n, m이 입력되면 [m][n]인 이중 배열을 선언하고i, j, x, y가 입력되면 이중 반복분으로 [j][i] ~ [y][x]를 더하자. 1차시도 (시간초과)2차시도 (pypy로 컴파일, 성공)import sysn, m = map(int, sys.stdin.readline().split())lst = [[0]*n for _ in range(m)]for i in range(n): for idx, k in enumerate(sys.stdin.readline().split()): lst[idx][i] = int(k)num = int(sys.stdin.readline())result = [0]*numfor idx in range(num): i,j,x,y ..
요세푸스 순열이 대체 무슨 규칙으로 정해지는 지 감도 안잡혔음. 맨처음에는 N을 기준으로 양 끝의 수를 더해서 N이 되도록해야하나? 예를 들어서 이면 3+4 = 7, 6+1 = 7, 2+5 = 7 했는데 그러면 3, 6, 2 이 순서는 어떻게 만들어질지 모름. 문제를 잘 보면 " 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다."이게 포인트였던 거 같다. 한 사람이 제거되면 제거된 사람을 제외한 새로운 길이를 기준으로 삭제할 사람을 찾아내야 했다. 풀이과정 1. 입력으로 주어진 k의 인덱스가 어디있는 지 찾는다. 2. 제거한 사람의 인덱스를 새로운 배열에 저장하고 기존 리스트에서는 삭제. 3. k번째 사람이 제거된 리스트의 길이로 재조정하고, (기존 배열에서의 k번째 사람의..
수학적?으로 접근해서 매우 복잡하게 해석했다.. 좌표로 생각하면서 푸니까 서로 겹치는 부분을 찾기 위해 좌표가 주어지면 해당 좌표가 다른 좌표와 겹치는 지, 아닌지 검사하기 위해 조건문으로 다 걸러서 찾아냄 1차 시도 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)); long s = 0; int n = Integer.parseInt(br.readLine()); int[][] lst = new int[n][2]; fo..
d(n)이라는 함수를 만들어서 리스트에 셀프넘버가 아닌 것들을 저장하자 라는 생각으로 접근 시도1 lst = [] def d(n): #셀프넘버가 아닌 것들 num = n + int(n/1000) + int(n%1000/100) + int(n%100/10) + n%10 return num n=0 while(True): n += 1 if d(n) > 10000: break lst.append(d(n)) for i in range(1, 10001): if i not in lst: print(i) 아무리 생각해도 맞는거 같은데 자꾸 출력이 이상하게 나와.... 그래서 왜 이상한지 손으로 노가다로 풀어봤다 저 코드를 실행하면 9999가 출력되는데 n = 9972일때 d(n) = 9999를 반환 하지만 내 코드에서..
hapBday
개발자로 성장하기 위한 기록들