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이라 할..

저번에 서버리스 컴퓨팅에 대한 포스팅을 썼었다. 저 땐 사실 서버리스로 딱히 뭘 만들어보겠다는 생각은 없었고 그냥 "대학원 시절에 서버리스란 개념을 배웠었는데 직접 개발을 해보진 못했었지, 리뷰하면서 한번 람다 써보기나 해볼까" 같은 느낌으로 쓴 거였다. 그런데 람다를 써보면서 생각을 해보니까 전에 만들었던 (정확히는 얼추 만들긴 했는데 '완성' 하진 않고 있었던) EZ2AC 성과사진 분석기를 람다 기반으로 바꿔서 다시 만들면 더 낫지 않을까, 라는 생각이 들더라. 왜냐면 람다 같은 서버리스 컴퓨팅 서비스들의 특징이 종량제 과금, 그러니까 '요청을 보낸 횟수만큼만' 과금을 한다는 것인데, 이 성과 분석기라는게 많은 사람들이 쓰는 것도 아니고 딱 1명을 위해서 만들어진 서비스이기 때문에() EC2 서버를 ..
대부분의 프로그래밍 언어에서 기본적으로 제공하는 sort 함수를 사용하면 일반적인 숫자나 문자열이 들어있는 배열을 정렬하는 것은 쉽다. 하지만 여러 속성이 들어있는 '객체' 들이 들어있는 배열이 있다면 어떻게 정렬할까? 예를 들어서 '학생' 클래스에는 학번, 이름, 전화번호, 성적이라는 속성들이 들어있는데 이 학생들을 성적순으로 정렬해야 한다면? 파이썬에서는 lambda 표현식이라는 걸 사용하면 dict를 값 기준으로 정렬한다던지 하는 것이 가능했었다. res = sorted(genres_plays.items(), key=(lambda x: x[1]), reverse = True) 자바에서도 비슷한 일을 해야 할 일이 생겼다. '기록' 이라는 클래스가 있다. '기록' 클래스의 속성으로는 제목, 레벨, 난..
- Ajax 브라우저의 새로고침 없이 서버로부터 데이터를 얻어오는 방법 부스트코스 2-2에서도 잠깐 다뤘었으니 다시 보고 오자. > 왜 비동기 통신이라 하는가? 페이지를 쭉 그리다가, 서버로부터 데이터를 추가로 요청하는 코드가 나오면 send() 로 요청을 보내놓고 나머지 작업을 수행한다. function ajax(data) { var oReq = new XMLHttpRequest(); oReq.addEventListener("load", function() { console.log(this.responseText); }); oReq.open("GET", "http://www.example.org/getData?data=data"); oReq.send(); } addEventListener 안에 있는 f..
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을 설치했다. 그리고 이런 서버 소프트웨어들의 설정이라던지 환경 변수라던지... '코드' 이외에도 신경써줘야 할 것들이 많다. 이러한 서버 환경 준비 작업들을 전문용어로 프로비저..