본문 바로가기

반응형

old

(225)
재귀 함수 짜는 법 재귀 함수 짜는 법 모든 반복문을 재귀 함수로 변환하는 것은 가능하지만, 이는 일반적으로 어려운 작업입니다. 그 이유는 재귀 함수의 사고 방식이 일반적인 인간의 사고 방식과 다소 다르기 때문입니다. 따라서 이를 습득하려면 충분한 연습과 익숙함이 필요합니다. 저는 이를 극복하기 위한것은 잘 반복문자체를 잘 정리하는 것이라고 생각해서 아래와 같은 표를 만들었습니다. 그리고 이를 바탕으로 쉬운 반복문부터 조금씩 어려운 반복문을 재귀함수로 구현하여, 나중에 이런 표없이 바로 구현하는것을 목표로 잡았습니다. 재귀함수 구현 목표: 종료 조건 (Base Case): 이전단계의 결과가 필요한가?: 문제분할 (Divide the Problem): 결과의 조합: 재귀호출, 다음 단계로 가기전 변경 할점 (Recursive..
웹 해킹 예제: 세션 고정 공격 로그인 화면 로그인시도 Request 로그인 완료 혹시나 하는 위험을 감수하기 위해서 가려놓았지만, 위 웹싸이트는 로그인 전에 세션을 미리 발급하고, 로그인시도 Request에서 ID와 비밀번호를 받아서 검증하는것을 확인할수 있습니다. 즉, 세션ID발급(인증안됨) → 로그인 인증 → 세션ID(인증완료) 그대로 사용 하는 웹싸이트이므로, 로그인 우회가 가능합니다. 가짜 로그인 시도 Burp suite의 리피터를 사용해 ID만 admin으로 바꾸어서 요청을 보냅니다. 당연히 답은 fail로 오지만 이미 인증과정에서 서버상의 사용자 ID는 변경되었고, 세션ID는 이미 인증상태이기 떄문에, 위쪽의 로그인 완료상태의 요청을 다시보내면 로그인 상태로 나오며 ID는 변경됩니다.
LeetCode 1672. Richest Customer Wealth 자바 문제 풀이 문제 Richest Customer Wealth - LeetCode 문제 해결 방법 2D어레이를 다루어서 값을 모두 더하고, 그를 이용해서 최적화를 할수 있는가 물어보는 문제이다. 처음에는 간단하게 다 더한 값을 어레이에 저장하고, 그 어레이를 지나며 최대값을 찾는 방식으로 답을 구하였는데, 최적화를 잘하면 굳이 어레이에 값을 저장할 필요가 없이 바로 최대값을 찾으면 된다. 일단 다 짠다음에서야 최적화가 가능하다는것을 깨달았는데, 바로 좋은 알고리즘을 짤수있도록 많이 문제를 풀어봐야 한다. 알고리즘 첫번째 반복문에서 각 어레이를 가져온다 두번쨰 반복문에서 각 어레이의 값을 모두 더한다 두번째 반복문이 끝나면 모두 더한값을 비교하여, 높은 수일 경우 저장한다 저장한 값을 리턴한다. Github Link h..
파이썬의 연산자 정리 파이썬에서 사용되는 산술 연산 종류 기호 설명 반환값 + 덧셈 입력된 값의 자료형에 따라 다름 - 뺄셈 입력된 값의 자료형에 따라 다름 * 곱셈 입력된 값의 자료형에 따라 다름 / 나눗셈 실수값 반환 // 나눗셈(몫) 정수값 반환 % 나머지 실수값 반환 ** 거듭제곱 입력된 값의 자료형에 따라 다름 and 논리 곱 참(True) 또는 거짓(False) 반환 or 논리 합 참(True) 또는 거짓(False) 반환 크다 참(True) 또는 거짓(False) 반환 = 크거나 같다 참(True) 또는 거짓(False) 반환 == 같다 참(True) 또는 거짓(False) 반환 결과 +, -, *, /, //, %, **, , = 표 A B 결과 int int int A+B 결과 int float float A..
GFG Count the Substrings 자바 문제 풀이 문제 Problem_Link 문제해결방법 조건: 대문자와 소문자의 개수가 같은 substring 특정 substring의 시작점과 끝점의 대소문자 차이가 같다면, 그 substring은 조건에 맞는 substring 이라 볼수 있다. 예제: “AbaBBa” 위 예제의 substring의 총 개수는 21개 이며, 조건에 맞는 substring은 7개이다. 대소문자 차이를 구하기 위해 대문자이면 +1을, 소문자이면 -1을 사용한다. 시작점은 대소문자 차이가 없으므로 0이다. index 없음 0 1 2 3 4 5 element 시작점 A b a B B a 대소문자 차이 0 1 0 -1 0 1 0 같은 대소문자 차이를 가지고 있는 사이의 substring은 조건에 맞는 substring이다. substring ..
1 ~ n까지 합(등차수열의 합)을 구하는 원리 정의 등차수열의 합은 연속하는 항들 간의 차이가 일정한 수열의 합을 말합니다. 등차수열의 합을 구하는 공식을 사용하여 1부터 n까지의 합을 계산할 수 있습니다. 사용 방법 등차수열의 합을 구하기 위해서는 다음과 같은 공식을 사용합니다: (첫 번째 항 + 마지막 항) × 항의 개수 / 2 a: 시작값 b: 종료값 c: 공차 공차: 등차수열에서 연속하는 항들 간의 차이 수학 예제 1부터 10까지의 합을 구한다고 한다면, a: 시작값= 1 b: 종료값= 10 c: 공차= +1 이므로 대입을 한다면 아래와 같습니다. 장점 등차수열의 합 공식은 간단하고 직관적입니다. 큰 수의 합을 빠르게 계산할 수 있습니다. 일반적인 형태의 등차수열에 대해 적용 가능합니다. 단점 이 공식은 등차수열에만 적용 가능하며, 다른 유형..
LeetCode 236. Lowest Common Ancestor of a Binary Tree 자바 문제 풀이 문제 Lowest Common Ancestor of a Binary Tree - LeetCode 문제 해결 방법 최소공통 조상LCA를 알고 있느냐고 묻고, 이를 구현할수 있느냐고 묻는 문제입니다. LCA의 전처리 과정은 이 문제에서는 사용할수 없습니다. Tree Node를 수정할수 없기떄문입니다. 그러므로, 보통 LCA알고리즘은 목표로하는 두 노드에서 부모로 올라가며 비교하는 방식이지만, 이 문제의 경우 root에서 하나씩 아래로 내려가며, p나 q가 현재 노드와 같은가 비교하여 구합니다. 참고 최소 공통 조상, LCA(Lowest Common Ancestor)이란 Github Link https://github.com/eunhanlee/LeetCode_236_LowestCommonAncestorofaB..
최소 공통 조상, LCA(Lowest Common Ancestor)이란 정의 최소 공통 조상, LCA(Lowest Common Ancestor). LCA는 트리 구조에서 두 노드의 가장 가까운 공통 조상을 찾는 알고리즘 또는 개념입니다. 예제 위와 같은 이진트리가 있다고 할때, 4와 6의 LCA는 1입니다. LCA(4,6)=1 목적 LCA의 목적은 트리 구조에서 두 노드의 가장 가까운 공통 조상을 효율적으로 찾는 것입니다. 사용을 고려해야 하는 경우 LCA 알고리즘을 고려해야 하는 경우: 트리 구조에서 두 노드 간의 거리를 계산해야 할 때 특정 노드를 루트로 하는 서브트리에 속한 노드들을 찾아야 할 때 컴퓨터 네트워크에서 최단 경로를 계산해야 할 때 게임 개발에서 충돌 감지 등의 문제를 해결해야 할 때 사용하면 안되는 경우 LCA 알고리즘은 트리 구조가 아닌 다른 자료 구조..

반응형