본문 바로가기

분류 전체보기

(273)
[백준/c++] 14500 테트로미노 문제 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 정수가 하나 쓰여 있다. 테트로미노 하나를 적절히 놓아서 테트로미노가 놓인 칸에 쓰여 있는 수들의 합을 최대로 하는 프로그램을 작성하시오. 테트로미노는 반드시 한 정사각형이 정확히 하나의 칸을 포함하도록 놓아야 하며, 회..
[백준/c++] 14502 연구소 문제 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 1) 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. 2) 새로 세울 수 있는 벽의 개수는 3개이며, 꼭 3개를 세워야 한다. 예를 들어, 아래와 같이 연구소가 생긴 경우를 살펴보자. 2 0 0 0 1 1 0 0 0 1 0 1 2 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 ..
[백준/c++] 14499 주사위 굴리기 문제 크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 이 지도의 위에 주사위가 하나 놓여져 있으며, 주사위의 전개도는 아래와 같다. 1) 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 2 4 1 3 5 6 주사위는 지도 위에 윗 면이 1이고, 동쪽을 바라보는 방향이 3인 상태로 놓여져 있으며, 놓여져 있는 곳의 좌표는 (x, y) 이다. 가장 처음에 주사위에는 모든 면에 0이 적혀져 있다. 지도의 각 칸에는 정수가 하나씩 쓰여져 있다. 2) 주사위를 굴렸을 때, 이동한 칸에 쓰여 있는 수가 0이면, 주사위의 바닥면에 쓰여 있는 수가 칸에 복사된다. 3) 0이 아닌 경우에는 칸에 쓰여 있는 수가 주사위의 바닥..
[백준/c++] 3190 뱀 문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 1) 사과를 먹으면 뱀 길이가 늘어난다. 2) 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 3) 보드의 상하좌우 끝에 벽이 있다. 4) 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 5) 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다. 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다. 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다. 만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워준다...
[백준] 12100 2048 (Easy) C++ 문제 2048 게임은 4×4 크기의 보드에서 혼자 즐기는 재미있는 게임이다. 이 링크를 누르면 게임을 해볼 수 있다. 이 게임에서 1) 한 번의 이동은 보드 위에 있는 전체 블록을 상하좌우 네 방향 중 하나로 이동시키는 것이다. 2) 이때, 같은 값을 갖는 두 블록이 충돌하면 두 블록은 하나로 합쳐지게 된다. 3) 한 번의 이동에서 이미 합쳐진 블록은 또 다른 블록과 다시 합쳐질 수 없다. (실제 게임에서는 이동을 한 번 할 때마다 블록이 추가되지만, 이 문제에서 블록이 추가되는 경우는 없다) 의 경우에서 위로 블록을 이동시키면 의 상태가 된다. 여기서, 왼쪽으로 블록을 이동시키면 의 상태가 된다. 의 상태에서 블록을 오른쪽으로 이동시키면 가 되고, 여기서 다시 위로 블록을 이동시키면 이 된다. 여기서 ..
WebSocket과 Socket.io의 차이 WebSocket vs socket.io 사실 애초에 둘은 다른 개념입니다. 웹 소켓은 양방향 소통을 위한 프로토콜이고, 프로토콜은 쉽게 말하자면 서로 다른 컴퓨터끼리 소통하기 위한 약속입니다. 반면, socket.io는 양방향 통신을 하기 위해 웹소켓 기술을 활용하는 라이브러리 입니다. WebSocket과 socket.io에 대해서 알아봅시다. WebSocket 웹 페이지의 한계에서 벗어나 실시간으로 상호작용하는 웹 서비스를 만드는 표준 기술 배경 HTTP 프로토콜은 클라이언트에서 서버로의 단방향 통신을 위해 만들어진 방법이기에, 실시간 웹을 구현하기 위해서는 양방향 통신이 가능해야 하는데, 웹소켓 이전에는 폴링(Polling), 스트리밍(Streaming) 방식의 AJAX 코드를 이용하여 구현하였지만..
정규화(Normalization) 정규화란 무엇인가요? 함수 종속성을 이용하여 릴레이션을 연관성이있는 속성들로만 구성되도록 분해해서, 이상 현상이 발생하지 않는 올바른 릴레이션으로 만들어 나가는 과정을 정규화(Normalization)이라고 합니다. 정규화의 기본 목표 관련이 없는 함수 종속성은 별개의 릴레이션으로 표현하는 것 기본정규형 제1정규형 1NF 릴레이션에 속한 모든 속성의 도메인이 원자값으로만 구성되어 있으면 제 1 정규형에 속한다. 제1정규형에 속하려면 릴레이션에 속한 모든 속성이 더는 분해되지 않는 원자 값만 가져야 한다. 최소 제1정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격이 있다. 제1정규형에 속하지만, 불필요한 데이터 중복으로 인해 이상 현상이 발생하는 릴레이션이 있을 수 있다. 이상현상 삽입 이상 새 데..
SSL/TLS Handshake에 대해서 HTTPS는 HTTP에서 통신 내용을 암호화하는 것이 추가된 프로토콜인데, 어떻게 암호화가 되는지 알아보자! HTTPS 과정 HTTPS 클라이언트와 서버간의 통신을 제 3자(CA : Certificate Authority)가 인증합니다. CA는 SSL 인증서로 클라이언트가 접속한 서버가 맞는지 확인을 합니다. SSL 인증서는 클라이언트와 서버간의 통신을 제 3자(CA)가 보증해주는 전자화된 문서 인증서를 통해 클라이언트가 접속한 서버가 신뢰할 수 있는 서버인지 판단을 합니다 SSL 통신에 사용될 공개키를 클라이언트에게 전달하는 것입니다. SSL 인증서로 서버가 신뢰할 수 있는지 판단하기 위해 공개키 서명 방식(TLS/SSL)을 사용합니다. TLS/SSL 방식을 사용해서 HTTPS 통신 내용을 암호화는데 ..