문제분류 그리디 알고리즘 정렬 문제 https://www.acmicpc.net/problem/1931 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이..
문제분류 백트래킹 문제 https://www.acmicpc.net/problem/15649 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. 예제 입력 1 3 1예제 출력 1 1 2 3예제 입력 2 4 2예제 출력 2 1 2 1 3 1 4 2 1 2 3 2 4 3 1 3 2 3 4 4 1 4 2 4 3예제 입력 3 4 ..
변수의 값을 집어넣어야 하는 문자열을 출력할 때, +(더하기) 연산자를 사용해 붙여서 출력하곤 합니다. String sung = "Jeon"; String name = "Inhyeok"; System.out.println("제 성은 " + sung + "이고, 이름은 " + name + "입니다."); 하지만, 이는 코드 가독성이 좋지 않고 깔끔하지도 않은 것 같습니다.... String.format() 메서드와 System.out.printf()를 활용한다면, 문자열(String)에 대한 Formatting을 통해 더 가독성이 좋은 코드를 만들 수 있습니다. String.format() : String String.format(String format, Object... args)는 첫 번째 매개변수로..
문제분류 구현 문제 https://www.acmicpc.net/problem/2563 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이..
문제분류 브루트포스 알고리즘 문제 https://www.acmicpc.net/problem/2231 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다..
소멸자(finalize)를 학습하던 중, 소멸자가 System.gc();를 설명하는 예제에 많이 쓰이는 것을 보고, 가비지 컬렉션(Garbage Collection)에 대해 알아보게 되었습니다. Garbage Collection(가비지 컬렉션)이란? 자바의 메모리 관리방법 중 하나로, 참조가 더 이상 일어나지 않는 메모리를 해제시켜 공간을 확보하는 방법입니다. 가비지 컬렉션을 수행하는 가비지 컬렉터는 코드를 작성하는 개발자가 메모리 할당과 해제에 일일히 관여하지 않아도 관리가 되게끔 도와줍니다. (C, C++ 에서는 메모리 할당/해제를 직접 관리해줘야 한다고 합니다...) 메모리 공간을 자동으로 확보하면서 메모리 누수를 방지하는 장점이 있지만, 메모리가 해제되는 시점을 알 수 없다는 단점도 존재합니다. ..
Java에서 알고리즘을 풀 때, 혹은 필요한 경우에 콘솔에 메시지를 출력해야합니다. 자주 사용되는 두 가지 방법이 있습니다. System 클래스의 println(); 메소드 활용 System.out.println("Hello Inhyeok !"); 우선, System 클래스는 자바에서 표준 입/출력을 담당하는 클래스입니다. System 클래스에는 in, out, err과 같은 클래스 변수가 정의되어 있습니다. 그 중, System.out은 표준 출력 스트림으로, print();, printf();, println() 메소드는 이러한 스트림을 콘솔에 출력해주는 메소드입니다. print(); vs printf(); vs println(); ? print();와 printf();의 차이는 출력 양식(forma..
Java를 활용해 알고리즘을 풀 때, 콘솔에서 입력 값을 받아와야 합니다. 이때, 자주 사용되는 입력 방법은 2가지 정도가 있습니다. java.util.Scanner 클래스 import java.util.Scanner; // Scanner 클래스 사용을 위해선 import 해주어야 합니다. public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); // 한 줄의 콘솔 입력 값을 읽어온다. sc.close(); // 콘솔 입력이 끝나면, 스캐너를 종료시켜주어야 한다. System.out.println(input); // 입력 값 출..