본문 바로가기

Java

(41)
[완전 탐색] N과 M(1) - 중복허용(오름차순) 1. 문제 https://www.acmicpc.net/problem/15652 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 2. 주의사항 선택된 이전 값(selected[k-1])을 구할때 인덱스의 시작(0, 1)에 따라서 조회하는 법을 다르게 써야한다. 시작인덱스 1 : 0번째 인덱스의 값은 0이므로 0일때 1로만 치환하면 된다. 시작인덱스 0 : -1번째 인덱스는 존재하지 않으므로(인덱스는 0부터 시작) -1인덱스가 조회되지 않도록 조건을 수정해야한다. 3.풀이 import java.io.*; impo..
[완전 탐색] N과 M(1) - 중복제외 1. 문제 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 2. 주의사항 이중 for문을 이용해서 selected배열을 모두 찾을 수도 있지만, 시간복잡도가 오래 걸리게 된다. 그래서 used라는 배열을 이용해서 선택한 숫자의 사용여부를 판단할 수 있다. used : 사용한 숫자를 인덱스로 하며 사용했다면 "1" 미사용이라면 "0"을 저장한다. selected : 선택한 숫자를 저장하는 배열 최초 호출한 재귀함수의 싸이클이 끝났을 경우 선택한..
[완전 탐색] N과 M(3) - 중복허용 1. 문제 https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 2. 주의사항 selected배열에 선택한 값 N을 넣을 때 배열의 시작이 0인지, 1인지에 따라서 자연수 N선택하는 for문, 최종적으로 출력하기 위한 비교연산(k ==m)이 달라지므로 을 헷갈리면 안된다. N(자연수)을 선택하는 for문의 시작값은 0이아닌 1로 설정(0으로 해도 되나 추가로 +1을 계산해줘야함) 3.풀이 import java.io.*; import java.uti..
[이분 탐색] 수 찾기 https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net import java.io.*; import java.util.*; public class Main { static FastReader scan = new FastReader(); static int N, L, R; static int[] A, B; static void input() { N = scan.nextInt(); A = new int[N]..
[FP] 함수형 프로그래밍이란? 출처 https://mangkyu.tistory.com/111 [프로그래밍] 함수형 프로그래밍(Functional Programming) 이란? 1. 함수형 프로그래밍(Functional Programming)에 대한 이해 [ 프로그래밍 패러다임(Programming Paradigm) ] 프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 mangkyu.tistory.com 프로그래밍의 패러다임 명령형 프로그래밍 : 무엇(What)을 할 것인지 나타내기 보다 어떻게(How) 할 건지를 설명하는 방식 절차지향 프로그래밍 : 수행되어야 할 순차적인 처리 과적을 포함하는 방식(C, C++) 객체지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용..
[Java] 리플렉션 (Reflection) 리플렉션은 일반적으로 Java 가상 머신에서 실행되는 애플리케이션의 런타임 동작을 검사하거나 수정하는 기능이 필요한 프로그램에서 사용된다. 리플렉션은 강력하지만 무분별하게 사용해서는 안 된다. 리플렉션을 사용하지 않고 작업을 수행할 수 있다면 사용을 피하는 것이 좋다. 리플렉션을 통해 코드에 액세스할 때 다음 사항을 염두에 두어야 한다. 장점 확장성 디버거 및 테스트 도구 단점 성능 오버헤드 보안 제한 내부 노출 출처 : https://docs.oracle.com/javase/tutorial/reflect/index.html Trail: The Reflection API (The Java™ Tutorials) The Java Tutorials have been written for JDK 8. Examp..
[Java] 중첩클래스(Nested Classes) Java 프로그래밍 언어를 사용하면 클래스 내에 다른 클래스를 정의할 수 있다. 이러한 클래스를 중첩 클래스라고 한다. - 중첩 클래스를 사용하는 이유 한 곳에서만 사용되는 클래스를 논리적으로 그룹화 캡슐화 증가 더 읽기 쉽고 유지 관리하기 쉬운 코드로 이어짐 - 더 구체적인 상황에 맞게 사용하는 경우 Local Classes(로컬 클래스) 클래스의 인스턴스를 두 개 이상 생성하거나 생성자에 액세스하거나 이름이 지정된 새 유형을 도입해야 하는 경우 Anonymous Classes(익명 클래스) 필드나 추가 메소드를 선언해야 하는 경우 Lambda Expression(람다식) 다른 코드에 전달하려는 단일 동작 단위를 캡슐화하는 경우 기능 인터페이스의 간단한 인스턴스가 필요하고 앞의 기준이 적용되지 않는 경..
[Java] 익명클래스(Anonymous Classes) 익명 클래스를 사용하면 코드를 더 간결하게 만들 수 있다. 클래스를 선언하고 동시에 인스턴스화할 수 있다. 이름이 없다는 점을 제외하고는 로컬 클래스와 같다. 로컬 클래스를 한 번만 사용해야 하는 경우 사용하면 된다. - 익명 클래스의 구성 new 연산자 구현할 인터페이스, 확장할 클래스의 이름 생성자에 대한 인수를 포함하는 괄호 클래스 선언 본문 출처 : https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html Anonymous Classes (The Java™ Tutorials > Learning the Java Language > Classes and Objects) The Java Tutorials have been wri..