본문 바로가기

회고록(TIL&WIL)

MIL 2022.12~ 알고리즘 공부(java)

삼각수 구하기

// 재귀함수
public static int recursive(int n){
	if(n==1) return 1;
	return n + recursive(n-1);
}
// 삼각수를 저장할 배열
ArrayList<Integer> triangleList = new ArrayList<>();
for(int i =1; i <= 4; i++){
	  triangleList.add(recursive(i)); // 재귀함수 호출
}

int tri = 0;
for(int i  = 1; tri <= 10; i++){ // for문으로 추출
	triangleList.add(tri);
	tri += i;
}

배열 뒤집기

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[num_list.length];
        for(int i = num_list.length - 1, j = 0; i >= 0; i--, j++){
            answer[j] = num_list[i];
        }
        return answer;
    }
    
}

문자열 뒤집기

class Solution {
    public String solution(String my_string) {
        String answer = "";
        StringBuffer sb = new StringBuffer(my_string);
        answer = sb.reverse().toString();
        return answer;
    }
}

배열 자르기

import java.util.*;
class Solution {
    public int[] solution(int[] numbers, int num1, int num2) {
        int[] answer = new int[num2-num1];
        answer = Arrays.copyOfRange(numbers, num1, num2 + 1);
        return answer;
    }
}

정수 배열 정렬(오름차순, 내림차순)

기본타입 배열을 이용할 경우

int[] numbers = new int[] {0, 31, 24, 10, 1, 9};
// sort
Arrays.sort(numbers);

// reverse sort
numbers = Arrays.stream(numbers)
		.boxed()
		.sorted(Comparator.reverseOrder())
		.mapToInt(Integer::intValue)
		.toArray();

ArrayList를 이용할 경우

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
 
public class SortArrayList {
    public static void main(String[] args) {
 
        // ArrayList 준비
        ArrayList<String> list = new ArrayList<>(Arrays.asList("C", "A", "B", "a"));
        System.out.println("원본 : " + list);  // [C, A, B, a]
 
        // 오름차순으로 정렬
        list.sort(Comparator.naturalOrder());
        System.out.println("오름차순 : " + list);  // [A, B, C, a]
 
        // 내림차순으로 정렬
        list.sort(Comparator.reverseOrder());
        System.out.println("내림차순 : " + list); // [a, C, B, A]
        
        // 대소문자 구분없이 오름차순 정렬
        list.sort(String.CASE_INSENSITIVE_ORDER);
        System.out.println("대소문자 구분없이 오름차순 : " + list); // [a, A, B, C]
        
        // 대소문자 구분없이 내림차순 정렬
        list.sort(Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER));
        System.out.println("대소문자 구분없이 내림차순 : " + list); // [C, B, a, A]
    }
}

최대공약수와 최소공배수

두 자연수의 곱 = 최대공약수 x 최소공배수

최대공약수 >> 두 수의 공통되는 약수 중 가장 큰 수

최소공배수 >> 두 수의 공통되는 배수 중 가장 작은 수

// 최대공약수
public static int getGCD(int num1, int num2){
	if(num2 == 0){
    	return num1;
    } else {
    	return getGCD(b, a%b);	
    }
}
// 최소공배수
public static int getLCD(int num1, int num2){
    return num1 * num2 / getGCD(num1, num2);
}