문제 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제일 친한 친구인 비버의 굴로 가능한 빨리 도망가 홍수를 피하려고 한다. 티떱숲의 지도는 R행 C열로 이루어져 있다. 비어있는 곳은 '.'로 표시되어 있고, 물이 차있...
문제 강호는 코딩 교육을 하는 스타트업 스타트링크에 지원했다. 오늘은 강호의 면접날이다. 하지만, 늦잠을 잔 강호는 스타트링크가 있는 건물에 늦게 도착하고 말았다. 스타트링크는 총 F층으로 이루어진 고층 건물에 사무실이 있고, 스타트링크가 있는 곳의 위치는 G층이다. 강호가 지금 있는 곳은 S층이고, 이제 엘리베이터를 타고 G층으로 이동하려고 한다. 보...
문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 0초 후에 2*X의 위치로 이동하게 된다. ...
문제 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 Ar명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모든 나라는 1×1 크기이기 때문에, 모든 국경선은 정사각형 형태이다. 오늘부터 인구 이동이 시작되는 날이다. 인구 이동은 하루 동안 다음과 같이 진행되고,...
문제 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가지고 있고, 이 크기는 자연수이다. 가장 처음에 아기 상어의 크기는 2이고, 아기 상어는 1초에 상하좌우로 인접한 한 칸씩 이동한다. 아기 상어는 자신의...
문제 그래프가 주어졌을 때, 그 그래프의 최소 스패닝 트리를 구하는 프로그램을 작성하시오. 최소 스패닝 트리는, 주어진 그래프의 모든 정점들을 연결하는 부분 그래프 중에서 그 가중치의 합이 최소인 트리를 말한다. 입력 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 ...
개요 여러 정점과 간선들로 이루어진 양방향 그래프가 있을때 부분 그래프가 최소한의 간선들로 이루어 졌을때 Spanning Tree, 신장트리라고 한다. 즉 Spanning Tree는 내부에 사이클이 없는 그래프를 의미하는것이다. 사이클이 생기는 순간 불필요한 간선이 하
문제 설명 자연수 n 개로 이루어진 중복 집합(multi set, 편의상 이후에는 "집합"으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다. 각 원소의 합이 S가 되는 수의 집합 위 조건을 만족하면서 각 원소의 곱 이 최대가 되는 집합 예를 들어서 자연수 2개로 이루어진 집합 중 합이 9가 되는 집합은 다음과 같이 4개가 있습니다...
그림과 같이 도식화한 지도에서 A도시에서 출발하여 B도시로 가는 길이 존재하는지 조사하려고 한다.길 중간 중간에는 최대 2개의 갈림길이 존재하고, 모든 길은 일방 통행으로 되돌아오는 것이 불가능하다.다음과 같이 길이 주어질 때, A도시에서 B도시로 가는 길이 존재하는지
명진이와 동휘가 숫자 맞추기 게임을 한다.게임 방법은 명진이가 0 에서 9 사이의 숫자를 하나 생각하면, 동휘가 질문을 통해 명진이가 생각한 숫자가 어떤 것인지 맞추는 것이다.동휘는 명진이가 생각한 숫자를 맞추는 데 총 N번의 질문 했다.동휘는 질문을 한 번 할 때,
이번에는 Server프로그램에 맞춰서 Client프로그램을 만들어보자. 이번에도 아래의 5가지 단계를 거쳐서 코드를 짜게 된다. > 윈속초기화 -> 소켓생성 -> 통신 -> 소켓닫기 -> 윈속종료 먼저 필요한 라이브러리를 링크해주자. 또, 서버 프로그래밍에서 했듯이
C++의 windock2헤더파일 이용하여 간단한 채팅 프로그램을 만들어보았다. 가장먼저, 헤더파일과 ws2_32.lib 라는 라이브러리를 링크해주어야한다. 윈도우소켓의 통신 과정은 5가지과정을거친다. > 윈속초기화 -> 소켓생성 -> 통신 -> 소켓닫기 -> 윈속종
이전 포스팅에서 만든 초기버전을 수정하였습니다. 이제는 키 입력간격이 1.5초인 모든 입력을 한줄로 log.txt에 기록하고, 같은키의 여러번 눌림을 기록가능합니다. 아래는 전체 소스코드
이전에 게임을 하다가 문득 든 생각으로, 내가 컴퓨터를 쓰면서 가장 많이 사용하는 키는 무엇일까? 하는 생각으로 찾아보니, PC사용자의 모든 키보드 입력값을 중간에서 가로채는 행위로 소프트웨어방식의 키로거 프로그램이라는게 있었다. 하지만 이는 악용될 우려가있기에 그저
영상 > https://www.youtube.com/watch?v=ZqwfoMjJAO4&list=PLSlpr6o9vURx4vjomFuwrFhvhV1nhJ_Jc&index=23 이전에는 이미지파일을 출력해보았는데 이번에는 특정 모양을 생성해주는 shapes클래스를 작성해보았다. 이때 필요한 개념은 아래와 같다. 먼저 왼쪽과 같은 흰색 사각형은 내부적으로...
수열 arr의 모든 부분수열중 원소가 모두 증가하는 부분수열의 최대길이를 구하려는 문제가 있을때,단순히 전부 그리디방법으로 탐색시, N N회의 연산이 필요하나,DP를 이용하여 N N (1/2)로 절반으로 줄이거나BS(Binary Search)를 이용하여 N log
정렬된 자료를 절반씩 나눠가며 원소k의 위치를 찾는 탐색 알고리즘이다.그리디 방법으로 탐색을 진행하면 O(N)이 걸릴것을 O(log N)에 마칠 수 있기때문에, 이후에 다른 알고리즘등에서 재사용이 많이되는 기본 탐색 알고리즘이다.(정렬된 연속된 자료가 필요하다.)먼저
수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수열은 A = {1, 100, 2, 5
개요 수열 arr에서 연속되거나 그렇지않은 부분수열이 증가할때 해당 부분수열의 모든 원소의 합이 최댓값을 구하는 알고리즘이다. 최대 증가 부분수열 알고리즘이라고 한다. 구현 i보다 작은 j들을 하나씩 살펴보며, 현재 dp[i]값을 작성할것인데, 이때 arr[j]
오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다.예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다.수의 길이 N이 주어졌을 때, 오르막 수의 개수를