본문 바로가기

전체 글

(199)
[프로그래머스 LEVEL1] 로또의 최고 순위와 최저 순위 / Javascript 문제 설명 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호가 일치 3 4개 번호가 일치 4 3개 번호가 일치 5 2개 번호가 일치 6(낙첨) 그 외 로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다. 알아볼 수 없는 번호를 0으로 표기하기로 하고, 민우가 구매한 로또 번호 6개가 44, 1, 0, 0, 31 25라고 가정해보겠습니다...
[프로그래머스 LEVEL1] 내적 / Javascript 문제 설명 길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이) 제한사항 a, b의 길이는 1 이상 1,000 이하입니다. a, b의 모든 수는 -1,000 이상 1,000 이하입니다. 입출력 예 a b result [1,2,3,4] [-3,-1,0,2] 3 [-1,0,1] [1,0,-1] -2 입출력 예 설명 입출력 예 #1 a와 b의 내적은 1*(-3) + 2*(-1) + 3*0 + 4*2 = 3 입니다. 입출력 예 #2 a와 b의 내적은 (-1)*1 + 0*0 + 1*(-1)..
9장. 웹 로봇 웹 로봇 사람과의 상호작용 없이 연속된 웹 트랜잭션들을 자동으로 수행하는 SW 프로그램 웹 사이트들을 떠돌아다니며 컨텐츠를 가져오거나, 하이퍼링크 따라가고, 데이터를 처리하는 등의 기능을 수행 👉 방식에 따라 '크롤러' '스파이더', '웜', '봇' 등으로 불림 9.1 크롤러와 크롤링 웹 크롤러: 웹 페이지를 한 개 가져오고, 그 다음 페이지가 가리키는 모든 웹 페이지를 가져오는 일을 재귀적으로 수행하는 로봇 👉 한마디로 크롤러는 웹 링크를 재귀적으로 따라가는 로봇 💡 crawl: 기어가다 인터넷 검색엔진은 크롤러를 통해 문서를 수집해 이를 검색 가능한 데이터베이스로 만든다. 👉 특정 단어를 포함한 문서를 찾을 수 있게 해줌 9.1.1 어디에서 시작하는가: '루트 집합' 루트 집합(root set): 크..
8장. 통합점: 게이트웨이, 터널, 릴레이 게이트웨이: 서로 다른 프로토콜과 애플리케이션 간의 HTTP 인터페이스 애플리케이션 인터페이스: 서로 다른 형식의 웹 애플리케이션이 통신하는데 사용 터널: HTTP 커넥션을 통해서 HTTP가 아닌 트래픽을 전송하는데 사용 릴레이: 일종의 단순한 HTTP 프락시, 한 번에 한 개의 홉에 데이터를 전달하는데 사용 8.1. 게이트웨이 웹이 발전함에 따라 복잡한 리소스를 올려야 하는 일이 많아짐 👉 모든 리소스를 한 개의 애플리케이션으로 처리하는 것이 불가능해짐 👉 리소스를 받기 위한 경로를 안내하는 게이트웨이가 만들어짐 게이트웨이 리소스와 애플리케이션을 연결 (애플리케이션은 게이트웨이에게 요청을 처리해달라고 할 수 있고 게이트웨이는 그에 응답할 수 있음) 동적인 컨텐츠를 생성하거나 DB에 질의를 보낼 수 있음..
7장. 캐시 캐시 개념 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치. 웹 요청이 캐시에 도착했을 때, 캐시된 로컬 사본이 존재한다면, 해당 문서는 원 서버가 아닌 캐시로부터 제공됨 캐시 장점 불필요한 데이터 전송을 줄여 네트워크 요금으로 인한 비용을 줄여줌 네트워크 병목을 줄여줌. 대역폭을 늘리지 않고도 페이지를 빨리 불러올 수 있음 원 서버에 대한 요청을 줄여줌. 서버는 부하를 줄일 수 있으며 더 빨리 응답할 수 있음 거리로 인한 지연을 줄여줌 7.1. 불필요한 데이터 전송 여러 클라이언트가 원 서버에게 같은 문서를 요청하면 서버는 각 클라이언트들에게 한 번씩 전송해줌 👉 똑같은 바이트가 네트워크 통해 반복해서 이동하므로 네트워크 대역폭을 잡아먹고 전송 속도 저하됨 🔮 캐시를 사용하면 첫번쨰 응답은 ..
6장. 프락시 6.1. 웹 중개자 웹 프락시 서버는 클라이언트와 서버 사이에 있는 중개자 역할을 한다. 👉 클라이언트(웹 서버 입장에서 프락시의 역할)와 서버(웹 클라이언트 입장에서 프락시의 역할) 기능을 모두 수행할 줄 알아야 한다 6.1.1. 개인 프락시와 공유 프락시 1. 개인 프락시 흔하지는 않지만 꾸준히 사용되는 프락시 브라우저의 기능을 확장하거나 성능을 개선하기 위해 작은 프락시를 사용자 컴퓨터에서 직접 실행 2. 공유 프락시 중앙 집중형 프락시를 관리하는 것이 비용 효율이 높고 쉽기에 가장 많이 쓰임 사용자가 많을수록 여러 사용자들의 공통 요청에서 이득을 취할 수 있기에 유리하다 6.1.2. 프락시 VS 게이트웨이 1. 프락시 👉 같은 프로토콜을 사용하는 애플리케이션들을 연결 2. 게이트웨이 👉 서로 다른..
[Redux] 7. 리덕스 useSelector 최적화 🙏 이번 장의 목표 useSelector로 컴포넌트를 최적화하는 방법을 배운다. 컴포넌트 리렌더링 여부 확인하기 먼저, 컴포넌트의 리렌더링 여부를 확인하기 위해 리액트 개발자 도구를 설치한다. 👉 리액트 개발자 도구 설치하기 도구를 설치한 뒤 브라우저에서 개발자 도구를 실행하면 다음과 같이 리액트 탭이 생성된 것을 확인할 수 있다. 여기서 왼쪽에 있는 톱니바퀴 버튼을 누르면 다음과 같이 설정 창이 화면에 표시된다. 설정 창에서 Highlight updates~~~를 체크해주면~?! 컴포넌트가 리렌더링될때마다 테두리가 변경되는 것을 확인할 수 있다. 투두리스트 페이지 살펴보기 이전에 만들었던 투두리스트 페이지를 살펴보면서 컴포넌트 최적화 방법에 대해 알아보자 페이지에서 +, - 버튼을 눌러보면 할 일 목록..
[Redux] 6. 리덕스로 투두 리스트(TodoList) 구현하기 리덕스로 투두리스트를 만들어보자!! 프리젠테이셔널 컴포넌트 구현 먼저, Todos라는 프리젠테이셔널 컴포넌트를 구현해보자. components 디렉터리에 Todos.js 파일을 생성한다. Todos에는 TodoItem, TodoList, Todos 컴포넌트를 작성한다. 👉 컴포넌트를 여러개로 분리하면 컴포넌트의 리렌더링 성능을 최적화할 수 있다. components/Todos.js 먼저, 다음과 같이 import 문을 작성한다. import React, { useState } from 'react'; 1. TodoItem 컴포넌트 할 일 목록 하나를 렌더링하는 컴포넌트 할 일을 완수했다면 텍스트 가운데에 줄이 그어지고 해당 컴포넌트를 클릭했을 경우에 onToggle 함수가 호출된다. const TodoI..