java 64

#Stream

Stream의 특징 원본의 데이터를 변경하지 않는다. Stream arrString = arr.stream();과 같이 별도의 복사본을 만든다. 일회용이다 : 한번 사용이 끝난 후 Stream이 또 필요한 경우에는 Stream을 다시 생성해야 한다. 내부 반복으로 작업을 처리하기 때문에 간결한 코드 작성이 가능하다. 함수형 인터페이스와 람다식 Stream은 매개변수로 함수형 인터페이스를 받음. 람다식은 반환값으로 함수형 인터페이스를 반환 → Stream의 매개변수로 전달 가능 람다식 : 함수형 인터페이스의 인스턴트를 생성하여 함수를 변수처럼 선언 Stream의 연산 종류 1. 생성하기 Stream객체를 생성하는 단계 Stream은 재사용이 불가능하므로, 닫히면 다시 생성해주어야 한다. 배열, 컬렉션, 임..

Language/JAVA 2022.01.19

[프로그래머스] 최소직사각형

https://programmers.co.kr/learn/courses/30/lessons/86491 이중배열 문제이다. 이중배열에서 원하는 값을 어떻게 꺼낼지, max를 어떻게 구할지에서 많이 헤맸다. 명함의 크기를 조정한다는 부분을 처음에 엄청 복잡하게 생각했었는데, 가로가 세로보다 큰 값으로 모두 통일하면 간단히 해결할 수 있는 문제였다. class Solution { public int solution(int[][] sizes) { //가로 세로 중 가로에 큰 값이 오도록 조정 for (int i = 0; i < sizes.length; i++) { if (sizes[i][0] < sizes[i][1]) { int a = sizes[i][0]; int b = sizes[i][1]; sizes[i]..

Language/JAVA 2022.01.19

[프로그래머스] 하샤드 수

https://programmers.co.kr/learn/courses/30/lessons/12947 class Solution { public boolean solution(int x) { boolean answer = true; //charAt으로 변환하여 자리수를 계산하기 위해 String으로 변환 //String num = Integer.toString(x)도 가능 String num = String.valueOf(x); int sum = 0; //charAt을 아스키코드에서 숫자로 계산할 때는 '0'(혹은 48)을 빼야 함 for (int i = 0; i < num.length(); i++) { sum += num.charAt(i) - '0'; } //answer = (x % sum == 0) ..

Language/JAVA 2022.01.19

[프로그래머스] 콜라츠 추측

https://programmers.co.kr/learn/courses/30/lessons/12947 class Solution { public int solution(int num) { int answer = 0; //연산과정에서 int단위를 넘어가기 때문에 long으로 변환 필요 long n = (long)num; //500회에 대한 조건을 만족시키기 위해 501번 실행 for (int i = 0; i 1 && n % 2 == 0) { n /= 2; answer++; } else if (n > 1) { n = n * 3 + 1; answer++; } else if (n == 1) { //위의 두 조건에서 모두 n>1이 있어 없어도 되는 부분 break; } } ..

Language/JAVA 2022.01.19

[프로그래머스] 제일 작은 수 제거하기

https://programmers.co.kr/learn/courses/30/lessons/12935 이 문제를 풀면서 까다로운 점은 다음 2가지였다. 배열 순서 그대로 출력해야 한다. 가장 작은 수가 여러 번 있는 경우 모두 제거해주어야 한다. 제한 조건(인덱스)에 의해 배열 내 수 중복은 없다!! 따라서 answer의 길이는 (arr.length가 1인 경우를 제외하고) arr-1이다.따라서 굳이 ArrayList를 쓰지 않고 배열로도 해결이 가능하다. 이를 해결 하기 위해 최소값을 구하는 과정에서 정렬을 사용하기 위해 배열의 복사본을 이용 인덱스마다 최소값과 비교하여 원하는 값만 새로운 배열에 추가 또한 배열의 크기 변화가 필요하여 List배열을 이용하였다. import java.util.Array..

Language/JAVA 2022.01.19

[프로그래머스] 정수 내림차순으로 배치하기

https://programmers.co.kr/learn/courses/30/lessons/12933?language=java import java.util.Arrays; import java.util.Collections; //import java.util.List; class Solution { public long solution(long n) { //String[]로 split이용하여 한자리 씩 분리 String[] arr = String.valueOf(n).split(""); //내림차순을 위해 List배열로 변형 //List arr = Arrays.asList(String.valueOf(n).split("")); //내림차순 정렬 Arrays.sort(arr, Collections.revers..

Language/JAVA 2022.01.18

#배열과 int/String : 자료형 변환

(알고리즘 풀면서 계속 테스트해보고 추가/수정 중!!) 문자열은 형변환이 비교적 간단한데, int는 단순하지 않다. List배열에 int가 아닌 Integer 배열이 있고, split같이 String의 메소드를 사용하거나 나누어서 특정한 처리가 필요할 수도 있다. 대체로 int배열은 String/char등으로 변환하고 다시 int배열로 변환하는 방법을 사용한다. Stream을 사용하기 위해서는 Stream배열로 변환하고 기능을 사용해야 한다. 문자열String과 문자열배열String[]/char[] 문자열String을 문자열배열String[]/char[]로 변환 1) String to char[] char[] cArray = input.toCharArray(); 참고 : char[] cArr = Stri..

Language/JAVA 2022.01.18

#List와 배열 : 자료형 변환(캐스팅) + 컬렉션 순회하면서 특정 원소 삭제

자바에서 자료형 변환을 캐스팅이라고 한다. 기본형 또는 부모와 자식간의 관계인 경우 캐스팅을 활용할 수 있다. 그 외에는 String.valueOf와 같은 각 클래스의 메소드를 사용해야 한다. List에서 배열로 전환 List에 담겨있는 제네릭과 변환되는 배열의 클래스가 같아야 한다. List array = new ArrayList(); 1) for문을 사용 String[] arr = new String[array.size()]; int size = 0; for(String item : array) { arr[size++] = item; } List list = new ArrayList(); int[] num = new int[list.size()]; for (int i = 0; i < list.size..

Language/JAVA 2022.01.18