1.Accepo-Language는 선호하는 언어의 우선순위를 전달할 때 사용한다.
앞에서 언급한 것 처럼 0~1 사이의 소숫점 세자리까지로 표현이 가능하고
1에 가까울수록 더 높은 우선순위를 나타낸다.
예를 들어 인도 사이트를 들어간다고 해도 ko-kr;q=1, en-us;q=0.9 등으로 설정할 경우 한국어 우선, 미지원의 경우 영어우선 등의 요청으로 들어가며 언어지원이 없다면 인도 사이트니 인도어로 표시될 것이다.
2.Authorization 헤더는 인증을 위해 사용되는데 일반적으로 로그인 요청을 보낼 때 Authorization 토큰 등을 전달해주면 인증이 필요한 개인정보등을 요청할 때 Authorization헤더에 첨부시켜 데이터를 받을 수 있는 방식이다.
3.From 헤더는 유저의 메일 주소를 전달하는데
공식사이트를 보자면 "From 요청 헤더는 요청한 사용자 에이전트를 제어하는 인간 사용자의 인터넷 이메일을 포함합니다."라는 언급이 있다.
아무래도 일반 사용자가 사용하는 것이 아닌 에이전트 관리자에게 연락할 수 있는 연락처를 남기는 것 같다.
이 기능을 제어 또는 인증을 위해 사용하지 말라는 경고가 있다.
4.Host는 HTTP/1.1에서 유일한 필수 헤더인데
가상호스트를 통해 하나의 서버에서 여러 도메인을 할당할 수 있기 때문에
정확한 연결을 위해 Host 헤더를 적어야 한다.
비우고 싶을 경우 Host : 처럼 뒤를 비워도 무방하다.
5.If-xxxx형식의 태그들은 특정 조건을 달성한 경우에만 리퀘스트를 요청하는 태그로 아래와 같은 종류가 있다.
If-Match - Etag가 일치할 경우 리퀘스트 요청(실패시 412 Precondition Failed)
If-Modified-Since - 특정 기간 이후 업데이트가 되었다면 리퀘스트 요청(실패시 304 Not Modified)
If-None-Match - Match와 반대로 없을 경우 요청(실패시 304 Not Modified가 출력되야 하며 서버측의 수정을 요청한 경우에는 412 Precondition Failed가 출력되어야 한다)
If-Range - Match와 비슷하지만 Etag 또는 갱신날짜를 통해 비교 후 일치하지 않는다면 갱신되었다고 판단해
일부 데이터가 아닌 전체 데이터를 제공하며 일치할 경우에만 요청하는 범위의 부분데이터를 제공한다.(성공시 206 Partial Content, 실패시 200 OK(전체 데이터))
If-Unmodified-Since - If-Modified-Since와 반대의 기능을 한다. 갱신되지 않은 상황에서만 리퀘스트를 받아들인다.(갱신되어 실패시 412 Precondition Failed)
6.최장 증가 수열(Longest Increasing Sequence)은 가장 긴 증가하는 부분 수열로 dp에서 자주 구하는 오르막수, 내리막수 등의 문제등에서 볼 수 있다.
일반적인 해결 방식은 index 1부터 진행하며 앞의 숫자와 비교해 더 클 경우 그 위치의 dp값에 +1을 한 다음 현재 dp값과 비교해 큰 값을 선택하는 방식이다.
[8,1,4,2,9,3,6,4,5,7]을 예로 들자면 dp로 처리할 경우
결과값은 [1, 1, 2, 2, 3, 3, 4, 4, 5, 6]가 나온다.
8은 비교할 대상이 없으니 본인 자신만을 포함한 1
1은 앞이 더 크기 때문에 다시 1
4는 앞에 있는 1보다 크기 때문에 dp(1) +1 = 2 (여기서 소괄호는 index가 아닌 값을 의미한다)
2는 앞의 1보다 크기 때문에 dp(1) +1 = 2
9는 2,4,1 모두 크지만 이미 2에서 dp(2)+1로 현재 dp[4]는 3이라
더 이상의 변경이 없다.
3은 앞의 2보다 크기 때문에 dp(2)+1 = 3이 되고
6은 바로 앞의 3이 dp(3)이기 때문에 4가 된다
4는 3보다 크기 때문에 dp(3)+1로 4가 되고
5는 바로 앞의 4보다 커서 5
7도 앞보다 커서 6이 된다는 사실을 알 수 있다.
수식으로 정리하면 아래와 같은데 한눈에 들어오지 않지만
자세히 보면 i위치의 dp값을 갱신하기 위해 한칸씩 내려가며
본인보다 작은 숫자의 dp값과 비교해 최대값을 선택한다는 사실을 이해할 수 있다.
let arr = [8,1,4,2,9,3,6,4,5,7]
let dp = new Array(arr.length).fill(1)
for(let i = 1 ; i < dp.length ; i++){
for(let j = i-1 ; j >= 0 ; j--){
if(arr[i] > arr[j]){
dp[i] = Math.max(dp[i], dp[j]+1)
}
}
}
console.log(Math.max(...dp))
(1).백준 2903 중앙 이동 알고리즘은 사각형을 다시 4개의 사각형으로 쪼개며 점의 갯수를 늘리는 방식이었다. 점이 2개에서 한번 쪼개면 3개로(한 변) 다시 쪼개면 5개로 늘어나는 모습을 보면 2n-1의 규칙을 가지고 있음을 알 수 있고 2n-1의 처리가 끝난 점의 제곱을 반환했다.
제곱이 커지는 것이 아니라 커진 숫자의 제곱이고 제한 숫자도 15밖에 되지 않아 BigInt를 고려할 필요는 없었다.
let input = 15
let n = 2
for(let i = 0 ; i < input ; i++){
n = 2*n -1
}
console.log(n**2)

'회고' 카테고리의 다른 글
| [취업준비일지] - 14 (0) | 2022.11.03 |
|---|---|
| [취업준비일지] - 13 (0) | 2022.11.02 |
| [취업준비일지] - 11 (0) | 2022.10.31 |
| [취업준비일지] - 10 (0) | 2022.10.30 |
| [취업준비일지] - 9 (0) | 2022.10.29 |
