분류 전체보기 481

[백준 21609] 상어 중학교

문제 상어 중학교의 코딩 동아리에서 게임을 만들었다. 이 게임은 크기가 N×N인 격자에서 진행되고, 초기에 격자의 모든 칸에는 블록이 하나씩 들어있고, 블록은 검은색 블록, 무지개 블록, 일반 블록이 있다. 일반 블록은 M가지 색상이 있고, 색은 M이하의 자연수로 표현한다. 검은색 블록은 -1, 무지개 블록은 0으로 표현한다. (i, j)는 격자의 i번 행, j번 열을 의미하고, |r1 - r2| + |c1 - c2| = 1을 만족하는 두 칸 (r1, c1)과 (r2, c2)를 인접한 칸이라고 한다. 블록 그룹은 연결된 블록의 집합이다. 그룹에는 일반 블록이 적어도 하나 있어야 하며, 일반 블록의 색은 모두 같아야 한다. 검은색 블록은 포함되면 안 되고, 무지개 블록은 얼마나 들어있든 상관없다. 그룹에 ..

[백준 21610] 마법사 상어와 비바라기

문제 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기를 크기가 N×N인 격자에서 연습하려고 한다. 격자의 각 칸에는 바구니가 하나 있고, 바구니는 칸 전체를 차지한다. 바구니에 저장할 수 있는 물의 양에는 제한이 없다. (r, c)는 격자의 r행 c열에 있는 바구니를 의미하고, A[r][c]는 (r, c)에 있는 바구니에 저장되어 있는 물의 양을 의미한다. 격자의 가장 왼쪽 윗 칸은 (1, 1)이고, 가장 오른쪽 아랫 칸은 (N, N)이다. 마법사 상어는 연습을 위해 1번 행과 N번 행을 연결했고, 1번 열과 N번 열도 연결했다. 즉, N번 행의 아래에는 1번 행이, 1번 행의 위에는 N번 행이 있고, 1번 열의 왼쪽에는 N번 열이, N번 열의 오른쪽에는 1번 열이 있다. 비바라기를 ..

[JS] Closure

클로져는 자바스크립트 뿐만 아니라 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어에서 사용되는 개념이다. 클로져를 좀 더 쉽게 이해하기 위해서는 실행 컨텍스트를 이해하는 것이 중요하다고 생각한다. 클로져의 개념과 특징을 알아보자. 함수 객체의 Environment 자바스크립트 엔진은 함수가 어디에서 호출되었는지가 아니라 함수가 어디에서 정의되었는지에 따라 상위 스코프를 결정하게 된다. 그리고 상위 스코프를 함수 객체의 내부 슬롯인 Evironment은 현재 실행 중인 실행 컨텍스트의 렉시컬 환경을 참조한다. 다음 코드를 보자 전역 코드가 평가되는 과정에서 apple 함수는 전역 환경에서 정의되었기 때문에 apple함수의 Evironment는 전역 렉시컬 환경을 참조하게 된다. const a = 1; ..

[백준 20056] 마법사 상어와 파이어볼

문제 마법사 상어가 크기가 N×N인 격자에 파이어볼 M개를 발사했다. 가장 처음에 파이어볼은 각자 위치에서 이동을 대기하고 있다. i번 파이어볼의 위치는 (ri, ci), 질량은 mi이고, 방향은 di, 속력은 si이다. 위치 (r, c)는 r행 c열을 의미한다. 격자의 행과 열은 1번부터 N번까지 번호가 매겨져 있고, 1번 행은 N번과 연결되어 있고, 1번 열은 N번 열과 연결되어 있다. 파이어볼의 방향은 어떤 칸과 인접한 8개의 칸의 방향을 의미하며, 정수로는 다음과 같다. 7 0 1 6 2 5 4 3 마법사 상어가 모든 파이어볼에게 이동을 명령하면 다음이 일들이 일어난다. 모든 파이어볼이 자신의 방향 di로 속력 si칸 만큼 이동한다. 이동하는 중에는 같은 칸에 여러 개의 파이어볼이 있을 수도 있다..

[백준 14465] 소가 길을 건너간 이유5

문제 농부 존의 농장에 원형 길이 있다고 했지만, 길은 그뿐만이 아니다. 그 옆에 일자형 길이 있는데, 1번부터 N번까지의 번호가 붙은 횡단보도 N (1 ≤ N ≤ 100,000)개로 이루어져 있다. 교통사고를 방지하기 위해 존은 각 횡단보도에 신호등을 설치해 놓았다. 그러던 어느 날, 강력한 뇌우로 인해 몇몇 신호등이 망가졌다. 존은 연속한 K개의 신호등이 존재하도록 신호등을 수리하고 싶다. 이번에도 우리가 존을 도와주자. 입력 첫 줄에 N, K, B (1 ≤ B,K ≤ N)가 주어진다. 그 다음 B줄에는 고장난 신호등의 번호가 하나씩 주어진다. 출력 정상적으로 작동하는 연속 K개의 신호등이 존재하려면 최소 몇 개의 신호등을 수리해야 하는지 출력한다. 접근 0으로 초기화된 리스트에서 고장난 신호등 번호..

[네트워크] TCP/IP

IP에서 사용 중인 패킷 교환 방식은 송신자가 수신자에게 보낼 데이터를 분할하여 패킷 형태로 송신한다. 이때 수신자는 여러 송신자로부터 패킷을 받게된다. 이때 네트워크의 상황에 따라 패킷의 순서가 달라지거나 전송되지 않을 수도 있다. 따라서 TCP에서 패킷이 흐름대로 수신자에게 전달될 수 있도록 도와준다. 결론적으로 IP는 패킷을 목적지까지 전달하는 것에만 집중을 하고 TCP는 패킷의 흐름을 관리하여 신뢰성을 확보한다. 그렇다면 IP와 TCP가 어떻게 동작하는지 자세히 알아보자. TCP의 동작과정 DNS에서 IP주소를 받아온 이후에 서버에 바로 데이터를 전송하지 않는다. 먼저 서버의 상태를 확인해야한다. 현재 서버가 나의 데이터를 받을 수 있는지 확인한 후에 데이터 전송이 이루어져야한다. 이를 위해 TC..

CS/네트워크 2021.07.08

[네트워크] DNS

DNS(Domain Name System)은 문자열 형태로 되어있는 URL을 숫자로 되어있는 IP주소로 치환해준다. 그렇다면 DNS가 왜 필요한지, 어떻게 동작하는지 알아보자. IP 주소를 그대로 사용한다면? 만약 google, naver 등에 접속하기 위한 주소를 숫자로 기억해야한다면 쉽지 않을 것이다. www.google.com으로 입력하면 될 것을 32bit의 수를 기억하여 원하는 정보를 검색해야 한다면 불편할 것이기 때문에 이러한 IP 주소대신 문자열 형태로 되어있는 도메인이름을 사용한다. 하지만 실제로 데이터를 전송하기 위해서는 IP주소가 필요하다. 따라서 브라우저에 입력한 도메인이름에 해당되는 IP주소를 찾는 과정을 거치게된다. 근데 이 과정에서 번거롭게 도메인이름에 해당되는 IP주소를 찾고 ..

CS/네트워크 2021.07.07

[백준 12100] 2048 (Easy)

문제 카드가 추가되지 않는 NxN 크기의 2048게임을 진행한다. 최대 5번 상하좌우 네 방향으로 이동시킬 수 있을 때 보드 내의 최댓값을 구하라 입력 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2보다 크거나 같고, 1024보다 작거나 같은 2의 제곱꼴이다. 블록은 적어도 하나 주어진다. 출력 최대 5번 이동시켜서 얻을 수 있는 가장 큰 블록을 출력한다. 접근 최대 다섯 번 진행될 수 있기 때문에 계속해서 방향을 바꿔서 모든 경우의 수를 탐색한다. 한 번 이동을 할 때 이미 합쳐진 수는 또다시 합쳐질 수 없다 => 표시를 해두도록 한다. 만약 ..

[백준 13460] 구슬 탈출2

문제 스타트링크에서 판매하는 어린이용 장난감 중에서 가장 인기가 많은 제품은 구슬 탈출이다. 구슬 탈출은 직사각형 보드에 빨간 구슬과 파란 구슬을 하나씩 넣은 다음, 빨간 구슬을 구멍을 통해 빼내는 게임이다. 보드의 세로 크기는 N, 가로 크기는 M이고, 편의상 1×1크기의 칸으로 나누어져 있다. 가장 바깥 행과 열은 모두 막혀져 있고, 보드에는 구멍이 하나 있다. 빨간 구슬과 파란 구슬의 크기는 보드에서 1×1크기의 칸을 가득 채우는 사이즈이고, 각각 하나씩 들어가 있다. 게임의 목표는 빨간 구슬을 구멍을 통해서 빼내는 것이다. 이때, 파란 구슬이 구멍에 들어가면 안 된다. 이때, 구슬을 손으로 건드릴 수는 없고, 중력을 이용해서 이리 저리 굴려야 한다. 왼쪽으로 기울이기, 오른쪽으로 기울이기, 위쪽으..

[백준 6236] 용돈 관리

문제 현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로 하였다. 현우는 통장에서 K원을 인출하며, 통장에서 뺀 돈으로 하루를 보낼 수 있으면 그대로 사용하고, 모자라게 되면 남은 금액은 통장에 집어넣고 다시 K원을 인출한다. 다만 현우는 M이라는 숫자를 좋아하기 때문에, 정확히 M번을 맞추기 위해서 남은 금액이 그날 사용할 금액보다 많더라도 남은 금액은 통장에 집어넣고 다시 K원을 인출할 수 있다. 현우는 돈을 아끼기 위해 인출 금액 K를 최소화하기로 하였다. 현우가 필요한 최소 금액 K를 계산하는 프로그램을 작성하시오. 입력 1번째 줄에는 N과 M이 공백으로 주어진..

728x90
반응형