Language

    Reactive Programming이란

    reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change. "리액티브 프로그래밍은 데이터 흐름과 변화의 전파와 관련된 선언적 프로그래밍 패러다임이다." 명령형 프로그래밍 vs 선언형 프로그래밍 명령형 프로그래밍은 작업을 '어떻게' 할 것인가에 초점을 맞춰 실행할 동작을 구체적으로 명시하지만, 선언형 프로그래밍은은 '무엇을' 할 것인가에 초점을 맞춰 어떻게 그 목표를 달성할지는 추상화 된다. 여기서 알아둬야 할 점은, 선언형 방식을 사용하기 위해서는 명령형 방식으로 '어떻게' 할 것인지가 추상화 되어있어야 한다는 점이다. List에 있는 숫자 중 짝수들의 ..

    [백준/Java] 1149번. RGB 거리

    문제 RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자. 1번 집의 색은 2번 집의 색과 같지 않아야 한다. N번 집의 색은 N-1번 집의 색과 같지 않아야 한다. i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다. 입력 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 ..

    [Java] Dynamic Programming, DP에 대해 알아보자

    다이나믹 프로그래밍 다이나믹 프로그래밍에서는 큰 문제를 해결하기 위해 여러 작은 문제를 해결하고, 해결한 문제의 결과를 저장해두었다가 필요할 때 계산없이 바로 사용할 수 있도록 합니다. 이때 계산된 결과(작은 문제)는 메모리 영역인 DP 테이블에 저장하게 됩니다. 다이나믹 프로그래밍을 수행하게 되면 수행 시간 효율성을 비약적으로 향상시킬 수 있고, 동적 계획법이라고도 불립니다. 일반적으로 Top-down, Bottom-up 방식으로 구현할 수 있습니다. 다이나믹 프로그래밍의 조건 다이나믹 프로그래밍은 문제가 다음 두 가지 조건을 만족할 때 사용할 수 있습니다. 1. 최적 부분 구조(Optimal Substructure) 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수..

    [Java] 스트림이란? 스트림stream 사용하기

    스트림 stream 자바7까지는 for문이나 반복자 Iterator로 컬렉션이나 배열의 요소를 출력할 수 있었습니다. 하지만 이 방식은 코드가 너무 길고, 재사용성이 떨어집니다. 또한, 지금까지 List를 사용할 때는 Collections.sort()를 사용하고, 배열을 정렬할 때는 Arrays.sort()를 사용해왔습니다. 각 클래스에 같은 기능의 메서드가 중복해서 정의되어 있는 것이죠. 자바8부터 사용할 수 있는 stream은 이러한 문제를 해결해줍니다. 스트림에는 데이터 소스를 추상화하여, 데이터 소스에 상관없이 같은 방식으로 데이터를 다룰 수 있게 해줍니다. 이로 인해 코드의 재사용성이 높아지게 됩니다. 스트림을 사용해서 Integer배열과 List를 정렬해서 출력해보겠습니다. public cla..

    [Java] String 배열 대소문자 구분 없이 오름차순/내림차순 정렬하기

    String 배열 대소문자 구분하여 오름차순 정렬 기본적으로 Arrays.sort() 사용하여 영문 문자열을 정렬하면 대소문자를 구분하여 정렬합니다. import java.util.Arrays; public class caseSort { public static void main(String[] args) { String[] strings = {"c", "B", "a", "b", "C", "A"}; //대소문자 구분하여 정렬 Arrays.sort(strings); System.out.println(Arrays.toString(strings)); } } String 배열 대소문자 구분 없이 오름차순 정렬 Comparator에 String.CASE_INSENSITIVE_ORDER 를 전달하면 대소문자 구분없..

    [Java] 객체 배열/리스트 오름차순,내림차순 정렬과 다중 조건 정렬

    Comparable 인터페이스 - compareTo comparable 인터페이스의 compareTo 메서드를 오버라이드해서 사용합니다. 1) 오름차순 정렬 기준 정렬 기준을 나이 오름차순으로 정의 Arrays.sort(객체명), Collections.sort(객체명) 통해 사용 내림차순: Collections.sort(객체명, Collections.reverseOrder()) 리스트인 경우 내림차순: 객체명.sort(Collections.reverseOrder())으로 사용 가능 import java.util.*; public class classSort{ static class Person implements Comparable { private String name; private int age; ..

    [Java] int 배열, List 오름차순/내림차순 정렬

    평소 int 배열을 자주 사용하는데 오름차순 정렬은 쉽지만, 항상 내림차순 정렬이 기억이 안나더라구요. 그래서 오늘은 int 배열과 List의 오름차순, 내림차순 정렬에 대해 알아보겠습니다. int 배열 int 배열을 정렬할 때는 java.util.Arrays를 이용합니다. 1) 오름차순 정렬 import java.util.Arrays; public class primitiveSort { public static void main(String[] args) { int[] arr = {25, 4, 7, 1}; //오름차순 정렬 Arrays.sort(arr); System.out.println(Arrays.toString(arr)); } } 2) 내림차순 정렬 int 배열의 내림차순 정렬은 바로 Arrays..