분류 전체보기 59

로그인 구현 방법 세팅

로그인 예제 기능 정리 1. 회원가입 loginId, password, passwordCheck, nickname 입력 loginId, nickname 중복 회원가입 불가 password와 passwordCheck가 다르면 회원가입 불가 Thymeleaf Validation을 사용하여 에러 메세지 출력 (Field Error) 회원가입 성공 시 권한은 USER로 설정 2. 로그인 loginId나 password가 틀리면 로그인 불가 Thymleaf Validation을 사용하여 에러 메세지 출력 (Global Error) 3. 로그아웃 4. 유저 정보 출력(인증) 로그인한 유저의 loginId, nickname, role(권한) 출력 로그인하지 않은 유저가 접근 시 로그인 페이지로 이동 5. 관리자 페이..

backend/springboot 2024.04.16

DFS

DFS (Depth First Search) 다차원 배열에서 각 칸을 방문할 때 깊이를 우선으로 방문하는 알고리즘 1. 시작하는 칸을 스택에 넣고 방문했다는 표시 남김 2. 스택에서 원소를 꺼내어 그 칸과 상하좌우로 인접한 칸에 대해 3번 진행 3. 해당 칸을 이전에 방문했다면 아무것도 하지 않고, 처음 방문했다면 방문했다는 표시를 남기고 해당 칸을 스택에 삽입 4. 스택이 빌 때 까지 2번 반복 칸이 N개일 때 시간복잡도 : O(N) - 모든 칸이 스택에 1번씩 들어가므로 (0,0) pop (1,0) pop --- 반복 --- #include using namespace std; #define X first #define Y second // pair에서 first, second를 줄여서 쓰기 위해서 ..

algorithm/정리 2024.04.16

99클럽 코테 스터디 14일차 TIL - 프로그래머스 JadenCase 문자열 만들기

공백문자가 연속으로 나올 수 있고 맨 앞이나 뒤에도 나올 수 있기 때문에 처음에 그냥 split 메서드 이용해서 푸니까 런타임 에러 발생 StringTokenizer 이용 String s= "this-is-sentence"; StringTokenizer st = new StringTokenizer(s, "-", true); while(st.hasMoreTokens()){ System.out.println(st.nextToken()); } /*** this - is - sentence ***/ import java.io.*; import java.util.*; class Solution { public String solution(String s) { String answer = ""; //String s..

알고리즘 - 기초 코드 작성 요령

시간복잡도, 공간복잡도 시간복잡도 - 입력의 크기와 문제를 해결하는데 걸리는 시간의 상관관계 제한 시간 1초 -> 프로그램이 3-5억번의 연산 안에 답을 내고 종료 빅오표기법 - 주어진 식을 값이 가장 큰 대표항만 남겨서 나타내는 방법 공간복잡도 - 입력의 크기와 문제를 해결하는데 필요한 공간의 상관관계 512MB = 1.2억개의 int 실수 자료형 1. 실수의 저장/연산 과정에서 반드시 오차가 발생할 수 밖에 없다. 2. double에 long long 범위의 정수를 함부로 담으면 안된다. 3. 실수를 비교할 때는 등호를 사용하면 안된다. (둘의 차이가 아주 작다는 의미로 1e-12 사용 권장) int main(void){ double a = 0.1+0.1+0.1; double b = 0.3; if(a..

algorithm/정리 2024.04.14

99클럽 코테 스터디 13일차 TIL - 백준 15654 (N과 M (5))

import java.awt.*; import java.util.*; import java.io.*; public class Main { static int N; static int S; static ArrayList list = new ArrayList(); static int[] re; static int[] arr; static boolean[] vi; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = I..

99클럽 코테 스터디 11일차 TIL - 백준 14888 (연산자 끼워넣기)

백트래킹으로 모두 탐색... -> 최소값 찾기 import java.awt.*; import java.util.*; import java.io.*; public class Main { static int N; static int[] num; static int[] operator; static int max = Integer.MIN_VALUE; static int min = Integer.MAX_VALUE; static Queue q = new LinkedList(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in));..

재귀

재귀 하나의 함수에서 자기 자신을 다시 호출해 작업을 수행하는 알고리즘 재귀 함수의 조건 특정 입력에 대해서는 자기 자신을 호출하지 않고 종료되어야 함 (Base condition) 모든 입력은 base condition으로 수렴해야 함 재귀에서는 함수를 명확하게 정의해야한다! - 함수의 인자로 어떤 것을 받을지 - 어디까지 계산한 후 자기 자신에게 넘겨줄지 모든 재귀 함수는 반복문만으로 동일한 동작하는 함수 만들 수 있음 재귀는 반복문 구현보다 코드가 간결하지만 메모리/시간에서는 손해 -> 적절한 때에 재귀 구현 한 함수가 자기 자신을 여러 번 호출 -> 매우 비효율적!! 재귀함수가 자기 자신을 부를 때 스택 영역에 계속 누적이 됨 -> 스택 제한이 있는 경우 메모리 초과 날 수 있음 백준 11729번..

algorithm/정리 2024.04.11

99클럽 코테 스터디 10일차 TIL - 프로그래머스 이진 변환 반복하기

내가 푼 코드 import java.util.*; import java.io.*; class Solution { public int[] solution(String s) { int[] answer = new int[2]; Queue q = new LinkedList(); int changeNum = 0; int zeroNum = 0; while(!s.equals("1")){ zeroNum += s.length()-s.replaceAll("0","").length(); s = s.replaceAll("0",""); int len = s.length(); if(len==1) break; while(len>0){ if(len%2==0){ q.add("0"); len/=2; continue; }if(len%2=..