Intro. 왜 Java 8인가? Java 8 (=Java 1.8) 은 2014년에 발표된 자바 버전이다. 내가 대학에서 자바를 배웠던 것은 Java 8이 발표되기 전이었다. 당연히 Java 8의 신기능에 대해서 대학 수업에서는 배우지 못했다 (조금 더 늦게 자바 수업을 들었다고 해도 배울 수 있었을지는 알 수 없지만). 학교 수업 이외에 개발 공부를 별도로 하고 있지 않았던 나로서는 대학을 졸업할 때까지 Java 8 버전을 쓰면서도 Java 8이라는 얘기를 딱히 들어본 적이 없었다. 졸업하고 한참 시간이 지나 부트캠프에서 개발을 다시 배우게 되었다. 커리큘럼 중에 Java 8의 추가기능에 대해 배우는 파트가 있었다. 이 포스팅에서 소개할 Lambda 식, Stream API, Functional Int..

Codeforces는 외국 알고리즘 저지 사이트로, 백준처럼 각종 알고리즘 문제를 풀어볼 수 있을 뿐 아니라 주기적으로 대회를 개최하는 걸로 유명한 사이트다. 대회에서 거둔 성적에 따라 레이팅을 얻을 수 있어서, 알고리즘 문제풀이를 즐기는 사람들 사이에선 코드포스 레이팅으로 실력을 가늠하기도 한다... 고 하더라. 나는 딱히 알고리즘 문제풀이가 취미인 사람은 아니고 그냥 취준 하다보니 백준이랑 SWEA 들락거리면서 지금 다니는 곳에서 내주는 과제 정도나 푸는 사람이다. 더구나 내가 알고있던 정보는, 코드포스 대회는 Div. 1이랑 Div. 2 두 개의 부문이 있는데 둘 중에 낮은 레벨인 Div. 2만 해도 3번 문제부터는 백준 solved.ac 기준으로 골드 상위에서 플티 이상급 문제가 튀어나오는 굉장히..

https://www.acmicpc.net/problem/17472 17472번: 다리 만들기 2 첫째 줄에 지도의 세로 크기 N과 가로 크기 M이 주어진다. 둘째 줄부터 N개의 줄에 지도의 정보가 주어진다. 각 줄은 M개의 수로 이루어져 있으며, 수는 0 또는 1이다. 0은 바다, 1은 땅을 의미한다. www.acmicpc.net 삼성 역량테스트 A형 (= 삼성 SW직군 공채 코딩테스트 수준) 기출 문제. 위 그림과 같은 맵이 주어지고, 파란색을 섬이라고 한다. 모든 섬을 연결할 수 있도록 다리 (회색) 를 놓아야 하는데 다리의 총 길이가 최소가 되도록 놓았을 때 그 길이를 구하는 문제이다. > 다리는 가로 or 세로, 일직선으로만 놓아야 한다 > 두 섬을 잇기 위해 다리를 놓았는데 중간에 또다른 섬이..

1. 상호배타집합 (Disjoint Set) 이란? 서로 중복으로 포함된 원소가 없는 집합들을 상호배타집합, 또는 서로소 집합이라 부른다. 즉 집합들간에 교집합이 없다는 의미이다. ex) 집합 A = {1, 2}, B = {3, 4} 는 Disjoint Set이다. 집합 A = {1, 2}, B = {2, 4} 는 Disjoint Set이 아니다. 2가 중복으로 들어가있기 때문이다. 그래프 문제를 비롯해서 알고리즘 문제를 풀다보면, 문제에서 주어지는 여러 개체를 집합으로 묶고, 그 집합들을 합친다던지 어떤 개체가 어떤 집합에 들어가있는지 찾는다던지 하는 일을 해야하는 경우가 종종 있다. 이 때 주어지는 개체들이 중복된 값을 가지지 않는 별개의 개체들이라면, 만들어지는 집합은 Disjoint Set이라 할..
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h가 이 과학자의 H-Index입니다. 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요. 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.논문별 인용 횟수는 0회 이상 10,000회 이하입니다. 예를 들어서 입력이 [3, 0, 6, 1, 5] 면 3회 이상 인..
n개의 정수로 이루어진 수열이 있다. 이 수열에서 한 정수를 제거하거나, 또는 두 정수를 제거할 수 있다. 한 정수를 제거하는 경우에는 그 정수가 점수가 되고, 두 정수를 제거하는 경우에는 두 정수의 곱이 점수가 된다. 이를 반복하여 수열에 아무 수도 남지 않게 되었을 때, 점수의 총 합의 최대를 구하는 프로그램을 작성하시오. 예를 들어 (-1 5 -3 5 1) 과 같은 수열이 있다고 하자. 먼저 1을 제거하고, 다음으로는 5와 5를 제거하고, 다음에는 -1과 -3을 제거했다고 하자. 이 경우 각각 점수가 1, 25, 3이 되어 총 합이 29가 된다. 첫째 줄에 정수 n(1≤n≤100,000)이 주어진다. 다음 n개의 줄에는 절댓값이 1,000,000을 넘지 않는 정수가 n개 주어진다. 직관적 아이디어:..

--- 1. 서버리스 컴퓨팅 (Serverless Computing) 전통적으로 웹 기반으로 서비스를 만든다고 하면 클라이언트와 서버, 즉 프론트엔드와 백엔드를 각각 다루게 된다. 그 중에서도 서버 쪽을 보면, 물론 서버 사이드 프로그래밍 언어를 이용해 서비스를 만드는 것도 중요하지만 '서버 컴퓨터' 의 환경을 구축하는 것도 일이다. 가장 기본적인 클라이언트-서버 구조로 만들었던 최근 프로젝트를 예시로 들면, 서버로 쓰기 위해 AWS EC2에서 가상 머신을 만들었으며 거기에 접속해서 Apache 웹 서버랑 Tomcat, MySQL을 설치했다. 그리고 이런 서버 소프트웨어들의 설정이라던지 환경 변수라던지... '코드' 이외에도 신경써줘야 할 것들이 많다. 이러한 서버 환경 준비 작업들을 전문용어로 프로비저..

n개의 노드가 있는 그래프가 있습니다. 각 노드는 1부터 n까지 번호가 적혀있습니다. 1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하려고 합니다. 가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미합니다. 노드의 개수 n, 간선에 대한 정보가 담긴 2차원 배열 vertex가 매개변수로 주어질 때, 1번 노드로부터 가장 멀리 떨어진 노드가 몇 개인지를 return 하도록 solution 함수를 작성해주세요. 노드의 개수 n은 2 이상 20,000 이하입니다. 간선은 양방향이며 총 1개 이상 50,000개 이하의 간선이 있습니다. vertex 배열 각 행 [a, b]는 a번 노드와 b번 노드 사이에 간선이 있다는 의미입니다. 그래프의 1번 노드에서부터 가장 멀리 떨어진..
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다.장르 내에서 많이 재생된 노래를 먼저 수록합니다.장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요. genres[i]는 고유번호가 i인 노래의 장르입니다. plays[i]는 고유번호가 i인 노래가 재생된 횟수입니다. genres와 pl..

위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다. 삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요. 삼각형의 높이는 1 이상 500 이하입니다. 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다. 다이나믹 프로그래밍 문제라고 써있다. DP 문제는 언제 봐도 어렵다. 저번에 Knapsack 문제를 예시로 DP에 대해서 나름 설명을 한 포스팅도 썼었고, 더 예전에는 프로그래밍 과..