🌴 문제 문제 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 들어있지 않으며, 바구니에는 공을 1개만 넣을 수 있다. 도현이는 앞으로 M번 공을 넣으려고 한다. 도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다. 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 공을 넣을 바구니는 연속되어 있어야 한다. 공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N (1 ≤ N..
🌱 오늘의 주제 : 지네릭 메서드와 형변환 🌱 지네릭 메서드 메서드의 선언부에 지네릭 타입이 선언된 메서드를 지네릭 메서드라고 한다. 지네릭 클래스에 정의된 타입 매개변수가 T이고, 지네릭 메서드에 정의된 타입 매개변수가 T이어도 이 둘은 별개의 것이다. class FruitBox { ... static void sort(List list, Comparator
🌏 주제 : 최소값과 최대값 문제 N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. 출력 첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다. 예제 입력 1 5 20 10 35 30 7 예제 출력 1 7 35 🌏 풀이 package BAEKJOON; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ..
🌱 오늘의 주제 : 제한된 지네릭 클래스 & 와일드 카드 🌱 제한된 지네릭 클래스 타입 매개변수 T에 지정할 수 있는 타입의 종류를 제한 하는 방법은 extends를 사용하면, 특정 타입의 자손들만 대입할 수 있게 제한 할 수 있다. class FruitBox { // Fruit의 자손만 타입으로 지정가능 ArrayList list = new ArrayList(); } FruitBox appleBox = new FruitBox(); // OK FruitBox toyBox = new FruitBox(); // 에러. Toy는 Fruit의 자손이 아님. 인터페이스를 구현해야 한다면, extends를 사용한다. (implements 사용하지 않음) interface Eatable {} class FruitBo..
🌱 오늘의 주제 : 지네릭스(Generics) 🌱 지네릭스(Generics) 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능 타입 안정성을 제공한다. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다. ArrayList tvList = new ArrayList(); tvList.add(new Tv()); Tv t = tvList.get(0); // 형변환 불필요 🌱 지네릭 타입과 다형성 지네릭 클래스의 객체를 생성할 때, 참조변수에 지정해준 지네릭 타입과 생성자에 지정해 준 지네틱 타입은 일치해야 한다. ArrayList liest = new ArrayList(); // 일치 지네릭 타입이 아닌, 클래스 타입 간에 다형성을 적용하는 것은 가능하다. 이..
🌴 문제 문제 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 입력 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10) 출력 각 테스트 케이스마다 A+B를 출력한다. 예제 입력 1 1 1 2 3 3 4 9 8 5 2 예제 출력 1 2 5 7 17 7 🌴 문제 분석 EOF 란? 이 문제에서 가장 중요한 점이 파일 종료 조건이 없이 그냥 입력이 주어졌다는 것이다. 즉 입력에서 더이상의 읽을 수 있는 데이터가 존재하지 않을 때 반복문을 종료하라는 것이다. 이렇게 데이터가 더이상 존재하지 않을 때 우리는 EOF (End of File) 즉, 파일의 끝이라 한다. 이를 처리하는 방법..
🌏 주제 : 재귀 알고리즘 재귀란? - 어떤 사건이 자기 자신을 포함하고 있거나, 또는 자기 자신을 사용하여 정의하고 있을 때 이를 재귀적이라고 한다. 🌏 유클리드 호제법 두 정수의 최대공약수(greatest common divisor)를 재귀적으로 구하는 방법 package Chapter5; import java.util.Scanner; public class ex5_2 { // 정수 x,y의 최대공약수를 구하여 반환 static int gcd(int x, int y) { if (y == 0) return x; else return gcd(y, x % y); } public static void main(String[] args) { // 유클리드 호제법으로 최대공약수를 구함 Scanner scan =..
🌏 주제 : 큐란? 가장 먼저 넣은 데이터를 가장 먼저 꺼내는 선입선출(FIFO: first in first out) 🌏 링 버퍼로 큐 만들기 배열 요소를 앞쪽으로 옮기지 않는 큐. 배열의 맨 뒤가 맨 앞과 연결되어있는 자료구조. 맨 앞 - front 맨 뒤 - rear 링 버퍼는 오래된 데이터를 버리는 용도로 사용할 수 있다. 🌏 예제 package Chapter4; import java.util.Scanner; public class LastNElements { public static void main(String[] args) { // 원하는 개수만큼 값을 계속 입력받고 요솟수가 N인 배열에 마지막 N개를 저장 Scanner scan = new Scanner(System.in); final int..
🌴 문제 문제 본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다. C++을 사용하고 있고 cin/cout을 사용하고자 한다면, cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용해 주고, endl 대신 개행문자(\n)를 쓰자. 단, 이렇게 하면 더 이상 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다. Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 ..
🌱 오늘의 주제 : Math클래스 🌱 Math클래스 Math클래스의 생성자는 접근 제어자가 private이기 때문에 다른 클래스에서 Math인스턴스를 생성할 수 없도록 되어 잇다. 클래스 내에 인스턴스변수가 없기 때문이다. Math클래스의 메서드는 모두 static이며, 두개의 상수만 정의 해놓고 있다. public static final double E = 2. 7182818284 ...; // 자연로그의 밑 public static final double PI = 3.14159265... // 원주율 🌱 Math의 메서드 package Chapter9; import static java.lang.Math.*; public class ex9_13 { public static void main(Strin..