분류 전체보기 64

연결 리스트

연결 리스트 원소들을 저장할 때 그 다음 원소가 있는 위치를 포함시키는 방식으로 저장하는 자료구조, 원소들은 이곳 저곳에 흩어져 있음 성질 k번째 원소를 확인/변경하기 위해 O(k) 필요 임의의 위치에 원소를 추가/제거는 O(1) 원소들이 메모리 상에 연속해있지 않아 Cache hit rate가 낮지만 할당 다소 쉬움 연결 리스트의 종류 단일 - 각 원소가 자신의 다음 원소의 주소 이중 - 각 원소가 자신의 이전 원소와 다음 원소의 주소 list 원형 - 끝과 처음 연결 배열 vs 연결리스트 list #include using namespace std; int main(void) { list L = {1,2}; // 1 2 list::iterator t = L.begin(); // t는 1을 가리키는 중..

algorithm/정리 2024.04.17

배열

정의와 성질 배열 - 메모리 상에 원소를 연속하게 배치한 자료구조 성질 O(1)에 k번째 원소를 확인/변경 가능 추가적으로 소모되는 메모리의 양(=overhead)가 거의 없음 Cache hit rate가 높음 메모리 상에 연속한 구간을 잡아야해서 할당에 제약 임의의 위치에 원소 추가, 제거 - O(N) 사용팁 fill(arr, arr+arr.size(), 0); //0으로 채워줌 STL vector 배열과 거의 동일한 기능, 배열과 달리 크기를 자유자재로 늘이거나 줄일 수 있음 #include using namespace std; int main(void) { vector v1(3, 5); // {5,5,5}; cout

algorithm/정리 2024.04.17

Session을 사용한 로그인 구현

세션(Session) 일정 시간동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술 쿠키는 사용자의 정보를 사용자 컴퓨터 메모리에 저장하지만 세션은 서버측에 저장 세션을 사용한 로그인 구현 개념 로그인 성공 시 세션을 하나 생성 이 세션의 Key 값은 UUID(중복되지 않는 랜덤값, 예측 불가)로 설정 Value 값에 사용자 정보 넣음 생성한 세션을 서버측 세션 저장소에 보관 세션의 Key값(UUID)을 쿠키를 통해 사용자에게 전달 사용자는 로그인 성공 이후 다른 요청을 할 때마다 이 쿠키를 서버에 같이 보내줌 서버 측에서 사용자에게 쿠키를 통해 UUID 값을 받는다면 전달받은 UUID를 Key 값으로 갖는 세션을 서버측 세션 저장소에서 검색 세션 저장소에..

backend/springboot 2024.04.16

99클럽 코테 스터디 16일차 TIL - 프로그래머스 신고 결과 받기

#include using namespace std; vector solution(vector id_list, vector report, int k) { vector answer; map reportList; map reportUser; set temp; for(string id : id_list){ reportList.insert(pair(id, temp)); reportUser.insert(pair(id, 0)); } for(string s: report){ stringstream ss(s); string x, y; ss >> x >>y; set name = reportList.at(x); name.insert(y); reportList.erase(x); reportList.insert(pair(x,..

Cookie를 사용한 로그인 구현

쿠키(Cookie) 사용자가 웹사이트 접속시 사용자의 개인 장치에 다운로드되고 브라우저에 저장되는 작은 텍스트 파일 웹사이트는 이 쿠키를 사용해 사용자의 장치 인식하고 일부 데이터 저장하기도 함 쿠키를 사용한 로그인 개념 쿠키를 사용하여 로그인 구현 기능 가능 로그인 성공 시 서버가 쿠키에 사용자 정보 넣어줌 클라이언트 측에서는 다음 요청을 할 때마다 이 쿠키를 서버에 같이 보내줌 서버에서는 이 쿠키를 확인해 로그인했는지와 유저 정보, 권한 등 확인 가능 쿠키 생성 방법 new Cookie() 메서드 통해 쿠키 생성 쿠키 생성 시 Key, Value 값 넣어줄 수 있음 Cookie cookie = new Cookie("userId", String.valueOf(user.getId())); 방금 만든 쿠키..

backend/springboot 2024.04.16

로그인 구현 방법 세팅

로그인 예제 기능 정리 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