분류 전체보기 86

프로그래머스 181913 문자열 여러번 뒤집기

https://school.programmers.co.kr/learn/courses/30/lessons/181913# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr foreach문을 사용해 queries값을 하나씩 받아와 answerArray에 tempArray의 값을 query[1]값부터 query[0]까지 대입하도록 했다. 처음 코드는 아래와 같이 작성했다. public String solution(String my_string, int[][] queries) { char[] tempArray = my_string.toCharArray(); char[..

알고리즘 2024.01.19

&&와 &, ||와 |의 차이

자바의 논리 연산자에는 &&, &, ||, |, ^, !가 있다. 이 중 &&와 &, ||와 |의 연산 결과는 똑같지만 jvm이 실행하는 방식이 다르다. && 연산자를 사용할 경우, 앞의 식의 거짓이면 뒤의 식은 실행하지 않는다. 앞의 식이 false이므로 뒤의 값은 확인할 필요가 없기 때문이다. 근데 & 연산자를 사용할 경우에는, 앞의 식이 false여도 뒤의 식까지 같이 실행한다. ||도 마찬가지로 앞의 식이 true이면 뒤의 식과 상관없이 true이므로 뒤의 식은 실행하지 않지만 | 연산자를 사용할 경우엔 앞의 식이 true여도 뒤의 식까지 같이 실행한다. 만약 뒤의 식에 수식 등이 들어갈 경우 수식에 증가, 감소되는 식이 있으면 실행이 되냐 안되냐에 따라 문제가 발생할 수 있으니 유의해야 한다.

Java 2023.11.01

[HttpStatus] 401 UnAuthorized와 403 Forbidden의 차이

프로젝트를 진행하며 예외처리를 해줘야하는 경우가 생겼다. 글 수정, 삭제 시 본인이 작성한 글이 아닌 경우 예외를 발생하도록 했는데 본인이 작성한 글이 아니니 수정, 삭제 작업에 대한 권한이 없다고 생각해 UnAuthorized를 줘야한다고 생각했다. 근데 찾아보니 401 UnAuthorized는 인증되지 않은 사용자이거나 인증 정보가 부족한 경우에 요청이 거부되었음을 의미한다고 한다. 인증이 되지않은 상태에서 요청을 할 경우에 UnAutorized 상태가 되는 것이다. 로그인을 하지 않고 요청을 하는 경우를 예로 들 수 있다.. 403 Forbidden은 인증된 사용자이나 해당 요청에 관한 권한이 없을 경우를 의미한다. 인증은 되었지만 요청에 대한 권한이 없을 경우에 Forbidden 상태가 되는 것이..

멋사/TIL 2023.08.24

스택과 큐

스택 스택은 삽입과 삭제 연산이 후입선출 (LIFO)로 이뤄지는 자료구조이다. 후입선출은 연산이 한쪽에서만 일어나는 특징이 있다. push : 데이터 삽입 pop : 데이터 삭제 후 확인 peek : 데이터 확인 스택은 깊이 우선 탐색 DFS, 백트래킹 종류의 코딩테스트에 많이 사용됨. 후입선출은 재귀함수와 원리가 비슷함. 큐 큐는 삽입과 삭제 연산이 선입선출(FIFO)로 이뤄지는 자료구조이다. rear : 큐의 가장 끝 데이터를 가리키는 영역 front : 큐의 가장 앞 데이터를 가리키는 영역 add : rear 부분에 새로운 데이터 삽입 poll : front 부분에 있는 데이터 삭제 후 확인 peek : front 부분에 있는 데이터 확인 큐는 너비 우선 탐색 BFS에서 많이 사용됨. 우선순위 큐 ..

알고리즘 2023.08.24

구간 합

구간 합 구간 합은 합 배열을 이용해 시간 복잡도를 더 줄이기 위해 사용하는 특수 목적의 알고리즘이다. 합 배열이란 ? 배열 A가 있다고 했을 때, 합 배열 S[i]는 A[0] ~ A[i]까지 합한 값을 의미한다. 합 배열을 미리 구해놓으면 기존 배열의 일정 범위의 합을 구하는 시간 복잡도가 O(N)에서 O(1)로 감소한다. 합 배열 S를 만드는 공식 S{i] = S[i-1] + A[i] 위와 같은 배열이 있다고 할 때, S[1]은 위 공식에 따라 S[1] = S[0] + A[1]이므로 3 + 6 = 9가 된다. 구간 합을 구하는 공식 배열 A의 i ~ j까지의 구간 합은 다음과 같다. S[j] - S[i - 1] 만약 배열 A의 2 ~ 4까지의 구간 합을 구한다고 하면 위 공식에 따라 S[4] - S[..

알고리즘 2023.08.09

배열과 리스트

배열 메모리의 연속적인 공간에 값이 채워져 있는 형태의 자료구조이다. 배열의 값은 인덱스를 통해 참조가 가능하다. 배열의 특징 - 인덱스를 사용해 값에 바로 접근이 가능하다. - 새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어렵다. - 배열의 크기는 선언 시 지정 가능하며, 한번 선언하면 크기르 변경할 수 없다. - 구조가 간단하여 코딩 테스트에서 많이 사용한다. 리스트 리스트는 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조이다. 자기 자신의 값과 다음 노드가 어떤 노드인지 가리키는 포인터를 갖고 있다. 리스트의 특징 - 인덱스가 없기 때문에 값에 접근하려면 head 포인터부터 순서대로 접근해야 함. 값에 접근하는 속도가 느림. - 포인터로 연결되어 있어 데이터를 삽입/삭제하는 ..

자료구조 2023.08.08

시간복잡도 - 시간 복잡도 유형(빅오메가, 빅세타, 빅오), 시간 복잡도 도출 기준

시간복잡도 알고리즘에서 시간복잡도란 주어진 문제를 해결하기 위한 연산 횟수를 말한다. 보통 1억번의 연산을 1초로 간주하여 예측한다. 시간 복잡도 유형 빅-오메가 : 최선일 때 연산 횟수를 나타낸 표기법 빅-세타 : 보통일 때 연산 횟수를 나타낸 표기법 빅-오 : 최악일 때 연산 횟수를 나타낸 표기법 이 중 코딩 테스트에서는 빅-오 표기법을 염두에 두고 풀어야 한다. 다양한 테스트 케이스를 수행해야 하므로 최악의 상황을 고려해야 한다. 빅-오 표기법의 시간 복잡도는 다음과 같다. O(1) < O(log n) < O(n) < O(nlog n) < O(n^2) < O(2^n) < O(n!) 시간 복잡도 도출 기준 1. 상수는 시간 복잡도 계산에서 제외함. 2. 가장 많이 중첩된 반복문의 수행 횟수가 시간 복..

알고리즘 2023.08.08

230725 15주 2일차 TIL. Spring Security 복습

Sprinc Security 인증 : 사용자가 자신이 누구인지를 증명하는 과정 인가 : 인증된 사용자가 어떤 작업을 수행할 수 있는지를 결정하는 과정 authorizeHttpRequests를 통해 어떤 URL에 접근 가능하고 어떤 URL에 접근 불가능한지 설정가능하다. 그 안에 requestMatchers를 통해 경로를 설정할 수 있다. 이 경로에 대해 다음 조건(permitAll(), authentication() 등)을 덧붙이겠다는 의미 JWT json으로 표현된 정보를 안전하게 주고받기 위한 Token의 일종으로 json을 인코딩한 것이다. 인코딩한 json을 바탕으로 어떤 암호화를 통해 만들어졌는지 위변조가 어렵게 만든 것이 jwt이다. 토큰 기반 인증 시 사용자 세션 기록할 필요 없으므로 Web..

멋사/TIL 2023.07.28