[TIL]2024.09.26 THU

GDORI·2024년 9월 26일
0

TIL

목록 보기
53/79
post-thumbnail

오늘 푼 알고리즘 코드카타

87390. n^2 배열 자르기

코드

function solution(n, left, right) {
    const answer = [];
    for(;left<=right;left++){
        answer.push(Math.max(Math.floor(left/n),left%n)+1);
    }
    return answer;
}

문제 풀이

해당 문제는 위의 gif와 같이 주어진 n으로 n행n열의 2차원 배열을 생성하고 1부터 n사이 즉 i로 i행 i열까지 i로 채운 후 행단위로 절삭하여 1차원 배열로 전환한다.

위 사진은 각 배열의 인덱스와 i값을 표시한 내용이다.
여기서 우리가 알 수 있는 패턴은 (x,j) 라고 했을 때 x와 j 둘 중 큰 수에+ 1을 해주면 i값이라는 것을 알 수 있다.

1차원 배열로 전환했을 경우 위와 같이 배치된다고 볼 수 있다.
그렇다 저 패턴은 (몫,나머지)이다.
무슨 몫? 나머지? 1차원 배열의 인덱스를 n으로 나눈 몫과 나머지.

즉 인덱스마다 구할 수 있는 원래 2차원 배열의 인덱스는
(i/n,i%n)이 된다고 볼 수 있다.

근데 여기서 우리가 원하는 값을 얻으려면 위에서 구한 둘 중 큰
수에서 +1을 하면 구할 수 있다는 것을 알게 되었다.

만약 left가 3이고 n이 3이라면? 2차원 배열이었을 경우 (1,0)
여기서 인덱스의 값을 알고싶다면? max(1,0) + 1 즉, 2이다.

고로 Math.max(Math.floor(원하는 인덱스/n),원하는 인덱스%n)+1 이 공식이 나오게 되는 것이다.

left 부터 rigth for문을 돌며 배열에 넣어주고 반환하면 끝이다.

응용계층

응용계층은 우리가 컴퓨터 또는 스마트폰으로 웹사이트나 게임을 할 때에 원활히 접속할 수 있도록 도와주는 역할이다. 마치 편지를 보내고 받을 때 전달이 잘 될 수 있도록 해주는 우체국과 같다.

OSI 7계층의 최상위 계층으로 사용자와 네트워크 간 상호작용을 관리하고 다양한 네트워크에 접근할 수 있게 해주는 아주 중요한 계층이라고 볼 수 있다.
데이터를 보내기 전 준비하거나 수신받은 데이터를 이해할 수 있게 해주는 역할을 한다.

HTTP

인터넷 주소창을 보면 도메인 앞에 HTTP / HTTPS가 붙은 것을 많이 봤을거다. 인터넷에서 웹사이트를 보려면 HTTP 프로토콜 규칙이 필요한데 이는 "나 웹사이트 보고싶어 보여줘!"라고 요청하고 서버는 "Here you are~"라고 대답하는 과정이라고 볼 수 있다.

HTTP는 웹에서 가장 대표적인 프로토콜로 클라이언트와 서버 간 요청(Request)과 응답(response)으로 이루어져 있다. 클라이언트가 브라우저를 통해서 웹 서버에 요청을 보내면 서버는 그에 맞는 HTML,CSS,JS,Asset 등의 데이터를 응답으로 반환한다. 주로 Stateless로 동작하며 요청이 독립적으로 처리된다.

HTTPS

HTTPS 는 HTTP의 보안 강화 버전으로 SSL/TLS 암호화 기술을 사용하여 클라이언트와 서버간 데이터 전송을 보호한다!

DNS란 무엇인가?

DNS는 Domain Name System으로 웹사이트 이름을 컴퓨터 IP로 바꿔주는 역할을 한다. 동네 사람들 집을 다 아는 사람에게 OO네집 주소가 어디에요~ 라고 물어봤을 때 OO시 OO구 OO동으로 답변해준다고 생각하면 될 것 같다.

DNS는 DNS서버 네트워크 데이터베이스를 통해 도메인 이름을 순차적으로 조회하여 해당 IP주소를 찾아낸다.
동작 순서는 다음과 같다.
1. 사용자가 브라우저에 도메인을 입력
2. 브라우저는 로컬 DNS 캐시에서 해당 도메인의 IP주소를 찾음, 만약 없다면 DNS 서버에 요청
3. DNS 서버가 도메인 이름에 해당되는 IP주소를 반환
4. 브라우저가 해당 IP로 접속하여 데이터를 주고 받음

결론

응용계층은 웹브라우저, 아웃룩 같은 프로그램이 HTTP, DNS 같은 프로토콜을 이용하여 사용자의 요청에 따라 데이터를 처리하고 네트워크를 통해 데이터를 주고받는 중요한 역할을 수행한다고 볼 수 있다.
OSI7 계층 모두 필요하지만 응용계층이 없다면 나머지는 필요가 없다고 생각한다.

profile
하루 최소 1시간이라도 공부하자..

0개의 댓글