본문 바로가기

분류 전체보기102

순열 1. 팩토리얼 - 1에서 n까지 모든 자연수의 곱 = n! //5! int n = 5; // for문 int result = 1; for (int i = 1; i x * y); System.out.println(result2); // 120 // 재귀함수 이용 public static int factorial(int num) { if (num == 1) { return 1; } return num * factorial(num - 1); } 2. 순열 (Permutation) - 순서를 정해서 나열 - 서로 다른 n개 중에 r개를 선택하는 경우의 수 ( 순서 O , 중복 X ) nPr = n! / (n-r)! (단 , 0 < r x * y); int rF = IntStream.range(2, n-r+1)... 2022. 3. 30.
최대 공약수, 최소 공배수 구하기 두 수 A,B의 최대공약수(GCD)를 G, 최소공배수(LCM)를 L이라고 하면, 다음 식이 성립한다. AB=LG 최대 공약수 G = AB/L 최소 공배수 L = AB/G public class Practice { // 약수 public ArrayList getDivisor(int num) { ArrayList result = new ArrayList(); for (int i = 1; i x).max().getAsInt(); return answer; } // 최소 공배수 // LCM: the Lowest Common Multiple public int getLCM(int numA, int numB) { int lcm = numA * numB / this.getGCD(numA,numB); return lc.. 2022. 3. 30.
경우의 수 1. 경우의 수 - 어떤 사건에서 일어날 수 있는 경우의 가짓수 - 표현 방법 사건 A가 일어날 경우의 수 : n(A) 2. 합의 법칙 - 사건 A 또는 사건 B가 일어날 경우의 수 - A와 B의 합의 법칙 : n(A ∪ B) - 공식 n(A ∪ B) = n(A) + n(B) - n(A ∩ B) 3. 곱의 법칙 - 사건 A와 사건 B가 동시에 일어날 경우의 수 - A와 B의 곱의 법칙 : n(A x B) - 공식 n(A x B) = n(A) x n(B) 2022. 3. 30.
집합 (Set) 1. 집합 (Set) - 명확한 조건을 만족하는 자료의 모임 - 자바에서는 Set이 집합이라 볼 수 있다. - 종류 : 교집합 / 합집합 / 차집합 / 여집합 2. 교집합 (Intersect) - 집합 A,B 양쪽 모두에 속하는 요소의 집합 - Set의 retainAll 메소드 사용 HashSet a = new HashSet(Arrays.asList(1, 2, 3, 4, 5)); HashSet b = new HashSet(Arrays.asList(2, 4, 6, 8, 10)); // retainAll은 메소드를 호출한 쪽에 교집합 연산 결과를 저장한다. a.retainAll(b); System.out.println("교집합 : " +a); // 2 , 4 3. 합집합 (Union) - 집합 A와 집합 B.. 2022. 3. 30.
컬렉션에서 중복값 찾아내기 Collections.frequency 이용 - 컬렉션 안에 있는 객체가 몇번 등장했는지 횟수를 리턴해준다. 사용법 Collections.frequency(객체를 담고 있는 컬렉션 인스턴스, 중복을 확인할 객체) 예시 int[] 배열에 중복값이 존재하면 중복값만 뽑아서 리스트로 만들어라 // int[] nums 가 존재. // 우선 int[]배열을 리스트로 변환 // Arrays.stream(int 배열) 로 IntStream 으로 변환 -> boxed로 Stream -> collect로 List로 변환 ArrayList list = (ArrayList) Arrays.stream(nums).boxed().collect(Collectors.toList()); ArrayList answer = (ArrayL.. 2022. 3. 30.
원시값 배열을 Stream을 이용해서 리스트로 바꾸기 // nums라는 int[] 이 존재할 때 ArrayList list = (ArrayList) Arrays.stream(nums).boxed().collect(Collectors.toList()); boxed()를 사용하면 IntStream같은 원시타입 스트림을 Wrapper타입 스트림으로 바꿔준다 ex) IntStream -> Stream Arrays.asList로는 원시타입 배열을 컬렉션으로 바꾸기 어려운데 스트림을 이용해서 바꾸면 편하게 바꿀 수 있다..! 2022. 3. 30.
자바 기초 문제 - 사탕 나눠 주기 문제 N 명의 아이들이 한 줄로 서있다. 각각의 아이들은 점수 표를 가지고 있는데 점수 표에 따라 다음과 같은 규칙으로 사탕을 나누어 줘야 한다. 적어도 1개 이상의 사탕을 나누어줘야 한다. 점수가 높은 아이에게는 바로 옆의 아이 보다는 사탕을 많이 줘야 한다. N 명의 아이들에 대한 점수 표가 ratings 배열에 주어질 때, 나누어 줘야하는 최소한의 사탕 개수를 출력하세요. 입출력 예시 입력 출력 1 2 3 6 3 2 1 6 1 0 2 5 1 2 2 4 1, 3, 5, 3, 1, 3, 5, 7, 5, 3, 1, 0 무조건 한개 이상씩 들고있어야하니 기본적으로 하나씩 아이들에게 쥐어 준 후, 이전 아이와 비교해주고 이전 아이의 사탕 개수에 변동이 생기니 이전아이보다 더 이전에 있던 아이와도 다시 비교 .. 2022. 3. 30.
자바 기초 문제(커서 편집기) 제로베이스 백엔드 스쿨에서 연습문제가 나오길래 한번 풀어보았다. 편집기에는 문자열과 편집 명령어가 주어지는데, 명령어의 동작은 다음과 같다고 한다. L : 커서를 왼쪽으로 한칸 이동(커서가 문장의 맨 앞이면 무시) D : 커서를 오른쪽으로 한칸 이동(커서가 문장의 맨 뒤이면 무시) B : 커서 왼쪽에 있는 문자를 삭제(커서가 문장의 맨 앞이면 무시) P x : x라는 문자를 커서 왼쪽에 추가 커서의 시작은 문자열에서 편집이 시작되는 위치가 시작점이다. 초기 문자열과 명령어가 주어졌을 때 결과를 출력하라 라는 문제이다. 초기 문자열 명령어 결과 출력 "aba" "L B" "aa" "abcd" "P x L P y" "abcdyx" 이런식으로 되어야하는데 나는 어떻게 풀었냐면 public class Test .. 2022. 3. 29.
자바 char 배열을 List로 변환하기(Stream으로 변환하기) char 배열을 List로 바꿔서 사용하고 싶은데 자꾸 안돼서 stream으로 변환해서 바꾸려고 했었다. char[] arr = {'a','b','c'}; // Arrays.asList(arr) 는 List 로 반환해서 내가 원하던게 아니었다. // Arrays.stream(arr) 에러발생!!! // 만약 int 배열이라면 IntStream으로 변환이 가능했을텐데 char는 그게 안된다. 안되길래 찾아보니 char는 원시타입이기 때문에 Stream으로 변경 불가능하고 래퍼 클래스로 감싸줘야 한단다. 그래서 그냥 ArrayList하나 만든 후 for each를 통해서 add로 하나씩 넣어줬다. ArrayList list = new ArrayList(); for (char c : arr) { // new .. 2022. 3. 29.
스트림 (Stream) 1. 스트림 - 배열, 컬렉션 등의 데이터를 하나씩 참조하여 처리 가능한 기능 - for문의 사용을 줄여 코드를 간결하게 함 - 스트림은 크게 3가지로 구성 : Stream 생성 / 중개 연산 / 최종 연산 데이터소스객체.Stream생성().중개연산().최종연산(); 2. 스트림 생성 - 배열 스트림 String[] arr = new String[]{"a","b","c"}; Stream stream = Arrays.stream(arr); - 컬렉션 스트림 ArrayList list = new ArrayList(Arrays.asList(1,2,3)); Stream stream = list.stream(); 3. 스트림 중개 연산 - Filtering filter 내부 조건에 참인 요소들을 추출 IntStr.. 2022. 3. 29.
람다식 1. 람다 표현식 (Lambda Expression) - 메소드 대신 하나의 식으로 표현하는 것 - 익명 함수라고도 한다. // (매개변수,...) -> {실행문...} (int x,int y) -> {return x+y;} 2. 장점 - 코드가 간결해진다. - 가독성이 높아진다. - 생산성이 높아진다 3. 단점 - 재사용이 불가능하다. - 디버깅이 어렵다 - 재귀함수로는 맞지 않다. 4. 사용하는 곳 - 람다식을 쓸 때는 함수형 인터페이스를 사용하는 곳에서 사용 가능하다. - 함수형 인터페이스 : 추상 메소드를 하나만 가지고 있는 인터페이스 * 심화 과정은 후에 모던 자바 인 액션 공부할 때 깊게 공부해보도록 할 예정이다. 2022. 3. 29.
컬렉션 프레임워크 (Collection Framework) 1. 컬렉션 프레임워크 - 여러 데이터를 편리하게 관리할 수 있게 만들어 놓은 것 - 자료 구조 및 알고리즘을 구조화 - 대표 인터페이스 : List, Set, Map 2. List 인터페이스 - 순서가 있는 데이터의 집합 - 데이터 중복 허용 - 대표 구현 클래스 : ArrayList, LinkedList, Vector // ArrayList // 타입을 지정 안하면 Object가 되어있는 것과 동일하다. ArrayList list = new ArrayList(); list.add("dokuny"); // 리스트에 추가, (인덱스,값) 이렇게 사용하면 인덱스 위치에 저장 list.get(0); // 인덱스로 값을 가져옴 list.remove("dokuny"); // 리스트에서 삭제, 인덱스로도 삭제 가.. 2022. 3. 29.
예외 (Exception) 1. 예외 - 정상적이지 않은 Case 2. 예외 처리 (Exception Handling) - 정상적이지 않은 Case에 대한 적절한 처리 방법 - try / catch 문으로 예외를 처리 3. finally - 예외 발생과 관계 없이 무조건 실행되는 부분 try { // 예외가 발생할 수도 있는 코드 }catch(NotFoundException e){ // 매개변수로 구체적인 예외를 넣어주는게 좋다. // 예외 발생 시 실행할 코드 작성 }catch(Exception e){ // 예외를 여러개 등록해서 처리 가능, 혹은 상위 예외로 처리하는 것도 가능 }finally { // 예외가 터지는 안터지는 항상 실행되는 부분 } 4. throw, throws - throw : 예외를 발생시킴 - throws.. 2022. 3. 29.
입출력(IO) 1. 콘솔 입력 - 입출력 방식 중 콘솔 입력 방법 // 콘솔 입력 방식 // System.in // 하나의 문자를 받아온다. int read = System.in.read(); // 입력 스트림에 남아있는 갯수 만큼 바이트 형태로 읽어서 데이터를 소진시켜준다. 엔터값 제거용 System.in.read(new byte[System.in.available()]); // InputStreamReader // 여러 개의 문자를 받아올 수 있음 InputStreamReader reader = new InputStreamReader(System.in); char[] chars = new char[3]; // 입력스트림에 들어있는 문자를 넣을 배열 생성 reader.read(chars); // 배열에 입력값을 넣어.. 2022. 3. 29.
내부 클래스(Inner Class)와 익명 클래스(Anonymous Class) 1. 내부 클래스 - 클래스 안에 선언한 클래스 (=중첩클래스) - 내부 클래스에서 외부 클래스 멤버에 접근 가능 - 외부에서는 내부 클래스에 접근 불가 class Outer{ ... class Inner{ ... } } - 내부 클래스 종류 : 인스턴스 클래스 / 정적 클래스 / 지역 클래스 / 익명 클래스 class Outer{ class Inner { } static class StaticInner{ } } // 외부 클래스 Outer o1 = new Outer(); // 내부 클래스 - 인스턴스 Outer.Inner i1 = new Outer().new Inner(); // 내부 클래스 - 정적 Outer.StaticInner is1 = new Outer.StaticInner(); 2. 익명 클래.. 2022. 3. 29.