문제N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수, 또는 제일 큰 정수를 찾는 것은 어려운 일이 아니다. 하지만 이와 같은 a, b의 쌍이 M(1 ≤ M ≤ 100,000)개 주어졌을 때는 어려운 문제가 된다. 이 문제를 해결해 보자.여기서 a번째라는 것은 입력되는 순서로 a번째라는 이야기이다. 예를 들어 a=1, b=3이라면 입력된 순서대로 1번, 2번, 3번 정수 중에서 최소, 최댓값을 찾아야 한다. 각각의 정수들은 1이상 1,000,000,000이하의 값을 갖는다. 입력첫째 줄에 N, M이 주어진다. 다음 N개의 줄에는 N개의 정수가 주어진다. 다음 M개의 줄에는 a, b의 쌍이 주어진다.출력M개의 줄에 입력받은 순서대로 각 a, b..
Cerbot을 통해 적용했던 HTTPS 인증서의 만료HTTPS는 웹 사이트와 사용자 간의 데이터 통신을 암호화하여 보호해 주는 보안 프로토콜이다. Cerbot은 이러한 HTTPS 인증서를 무료로 발급해주는 Let's Encrypt와 통함된 도구로 SSL/TLS 인증서를 쉽게 관리하고 갱신할 수 있도록 도와준다Cerbot이란?Let's Encrypt에서 제공하는 무료 SSL 인증서를 자동 설치 및 갱신하는 오픈 소프트웨어이다. 유효기간은 90일이다. 따라서 매번 수동 갱신을 할 것이 아니라면 자동 갱신을 설정해주는게 일반적이다. 기존 프로젝트의 Cerbot 유효기간 만료처음 적용할 당시 자동 갱신을 적용하지 않아 이렇게 90일이 지난 exam-lab.store 은 https가 적용이 되지 않은 모습이다. ..
3-1 LAN을 넘어서는 네트워크 계층 네트워크 계층 이동방식라우팅: 패킷 이동 최적의 경로 결정네트워크 계층이 존재해야 네트워크 간 라우팅 가능라우터: 라우팅을 수행하는 대표적인 장비IP주소와 MAC주소IP주소: 수신지와 같은 존재MAC주소: 수신인과 같은 존재패킷이더넷 헤더(14바이트)목적지, 출발지 MAC주소: 각 6바이트IP헤더(20바이트)식별자: 패킷 식별, 어떤 메시지에서 쪼개졌는지플래그(2바이트)Don’t Framgent → IP단편화 진행 1이면 불가능, 0이면 가능MF: 0이면 마지막 패킷, 1이면 패킷 더 존재단편화 오프셋: 몇번째 데이터에 해당하는 패킷인지ex. 오프셋 1480이면 첫 데이터로 부터 1480떨어짐TTL(Time To Live): 홉 지나갈때마다 -1, 0도달시 폐기프로..
문제유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 번호이고, 행과 열의 번호는 1부터 시작한다. 각각의 칸은 빈 칸이거나 벽이다.오늘은 집 수리를 위해서 파이프 하나를 옮기려고 한다. 파이프는 아래와 같은 형태이고, 2개의 연속된 칸을 차지하는 크기이다. 파이프는 매우 무겁기 때문에, 유현이는 파이프를 밀어서 이동시키려고 한다. 벽에는 새로운 벽지를 발랐기 때문에, 파이프가 벽을 긁으면 안 된다. 즉, 파이프는 항상 빈 칸만 차지해야 한다.파이프를 밀 수 있는 방향은 총 3가지가 있으며, →, ↘, ↓ 방향이다. 파이프는 밀면서 회전시킬 수 ..
문제러시아 가스를 크로아티아로 운반하기 위해 자그레브와 모스코바는 파이프라인을 디자인하고 있다. 두 사람은 실제 디자인을 하기 전에 파이프 매니아 게임을 이용해서 설계를 해보려고 한다.이 게임에서 유럽은 R행 C열로 나누어져 있다. 각 칸은 비어있거나, 아래 그림과 같은 일곱가지 기본 블록으로 이루어져 있다.파이프 라인의 설계를 마친 후 두 사람은 잠시 저녁을 먹으러 갔다. 그 사이 해커가 침임해 블록 하나를 지웠다. 지운 블록은 빈 칸이 되어있다.해커가 어떤 칸을 지웠고, 그 칸에는 원래 어떤 블록이 있었는지 구하는 프로그램을 작성하시오.입력첫째 줄에 유럽의 크기 R과 C가 주어진다. (1 ≤ R, C ≤ 25)다음 R개 줄에는 C개 글자가 주어지며, 다음과 같은 글자로 이루어져 있다.빈칸을 나타내는 ..
문제2048 게임은 4×4 크기의 보드에서 혼자 즐기는 재미있는 게임이다. 이 링크를 누르면 게임을 해볼 수 있다.이 게임에서 한 번의 이동은 보드 위에 있는 전체 블록을 상하좌우 네 방향 중 하나로 이동시키는 것이다. 이때, 같은 값을 갖는 두 블록이 충돌하면 두 블록은 하나로 합쳐지게 된다. 한 번의 이동에서 이미 합쳐진 블록은 또 다른 블록과 다시 합쳐질 수 없다. (실제 게임에서는 이동을 한 번 할 때마다 블록이 추가되지만, 이 문제에서 블록이 추가되는 경우는 없다) 이 문제에서 다루는 2048 게임은 보드의 크기가 N×N 이다. 보드의 크기와 보드판의 블록 상태가 주어졌을 때, 최대 5번 이동해서 만들 수 있는 가장 큰 블록의 값을 구하는 프로그램을 작성하시오. 입력첫째 줄에 보드의 크기 N..
풀이 백준의 2048문제와 다르게 상하좌우중에 한 방향으로 한번만 이동하면 되는 문제이다. 따라서 100개 케이스 2초 즉 1케이스당 200만 복잡도까지 사용가능하다. 방향을 입력받고 각 방향에 맞게 블럭을 이동시켜주면 된다. 이 과정을 투포인터로 할수도 있고 Queue를 사용할 수도 있다. 본인은 Deque을 사용해서 해당블록들이 합해지는 기록을 했다. 아래 이미지는 첫번째 케이스의 첫 열이 Queue에 들어오는과정을 설명한다. 중요한점은 3가지 조건을 생각해야한다.Queue가 비어있는가? -> 비어있다면 해당 칸값 바로 추가칸의 값이 0인가? -> 추가X바로 이전에 값이 합쳐졌는가?(이 조건을 안넣으면 계속해서 칸의 합이 합쳐진다.) -> 다음칸은 그냥 Queue에 추가 이후에는 Queue..
문제수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다.둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000)출력첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다. 풀이시간복잡도: O(nlogn), 약 2천만주어진 N의 크기가 100만이다. 따라서 최대 사용할수있는 복잡도는 O(nlogn)이다.기본적으로 DP, 다른 알고리즘으로는 시간복잡도 상 이 문제를 풀..
깃 명령어 동작원리 GIT INIT: 깃의 시작head: 현재 체크아웃된 브랜치를 가리키는 포인터refs: 브렌치, 태그와 같은 참조들을 저장하는 폴더index: 스태이징 영역, 즉 메타 데이터와 오브젝트 데이터 저장하는 파일git add시 생성objects(객체): 모든 데이터를 저장하는 폴더, 여러 객체 저장tree: 커밋 시점의 인덱스의 스냅샷commit: 커밋 정보가 들어있는 객체blob: 파일 정보가 들어있는 객체, 작성한 소스코드가 파일 내용이 됨 GIT ADD&COMMITgit add: 변경된 파일 스테이징 영역으로 올리기ADD시에 SHA-1 알고리즘을 통해 이러한 해시값을 얻을 수 있다 커밋 객체커밋 객체는 파일의 스냅샷을 포함하는 트리 객체를 참조커밋 객체는 이전 커밋과의 관계를 나타내는..
개념과 구조RDB개념IBM소속 Edgar F. “Ted” Codd가 1970년에 RDB 개념제시, 구조와 접근 방식을 테이블(릴레이션)로 정리한 관계형 DB데이터를 테이블 형식으로 저장하며, 행과 열로 구성테이블 간의 관계는 키(기본키 → 외래키)를 사용하여 정의구조- 주 구성요소SQL엔진: SQL 쿼리의 해석, 최적화, 실행을 담당하며, 데이터베이스의 논리적 데이터 구조를 관리스토리지 엔진: 데이터의 물리적 저장, 검색을 처리하며, 다양한 스토리지 엔진 옵션(My SQL의 경우 InnoDB, MyISAM 등)이 존재InnoDB: 트랜잭션 지원, ACID준수, 무결성 보장과 동시성 제어 중시MyISAM: 트랜잭션 지원x, 빠른 읽기 작업과 낮은 메모리 사용 중점HDD: 데이터를 실제로 저장하는 하드웨어 ..