Language/Java
[백준/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..
[Java] Collection에 저장된 요소 출력하기 (Iterator, ListIterator)
Iterator 컬렉션 클래스에 대해 iterator()를 호출하여 Iterator를 얻은 후 , Iterator인터페이스의 메서드를 사용하여 컬렉션의 요소를 읽어올 수 있습니다. 사용 가능한 메서드는 다음과 같습니다. 메서드 설명 boolean hasNext() 읽어올 다음 요소가 남아있는지 확인, 있으면 true 없으면 false Object next() 다음 요소 읽어오기, hasNext()가 true이면 next()를 호출하는 것이 안전함 void remove() next()로 읽어온 요소를 삭제, 반드시 next()를 먼저 호출한 후 호출해야함 ArrayList에 저장된 요소 출력 next()를 통해 읽은 요소값이 "c" 인 경우 해당 데이터를 제거하도록 했습니다. 제거 이전에는 리스트의 사이즈..