파이썬 -> Java 알고리즘 적응하기

BlackHan·2024년 5월 3일
0

상단에 import.java.util.* 을 먼저 추가한다.

Stack

추가로는 add와 push를 사용 가능하다.
삭제로는 pop 사용

    public static void main(String[] args) {
        Stack<Integer> stk = new Stack<>();
        stk.push(2); // push사용 
        stk.add(3); //add 사용
        System.out.println(stk);
        stk.pop();
        System.out.println(stk);
    }

결과

2와 3이 잘 들어가고, 3이 pop 된 것을 확인할 수 있다.
push와 add의 차이
push()는 stack에서 제공, add()는 List에서 제공하는 메서드
push()의 리턴값은 추가한 객체이고, add()의 리턴값은 boolean이다.
Stack에서는 push()를 쓰는 것을 추천한다. 그래야 스택 사용을 알아보기 쉽다.

Deque

기본적으로 ArrayDeque<>()를 사용한다.
스레드 세이프를 보장하진 않지만, 효율이 좋다고 한다.
자세한 내용은 해당 블로그에서 알아봤다.

    public static void main(String[] args) {
        Deque<Integer> q = new ArrayDeque<>();
        q.addLast(3);
        q.addLast(2);
        q.addLast(1);
        System.out.println(q);
        q.removeFirst();
        System.out.println(q);
        q.removeLast();
        System.out.println(q);
    }

결과

3, 2, 1이 잘 삽입 되었고, 앞에서 3과 뒤에서 1이 잘 삭제 된 것을 볼 수 있다.


1차원 배열 정렬

파이썬에서 주로 arr.sort()로 쓰이는 기능이다.

    public static void main(String[] args) {
        Integer[] arr = {1, 26, 17, 25, 99, 44, 303};
        Arrays.sort(arr);
        System.out.println("Sorted arr[] : " + Arrays.toString(arr));
        Arrays.sort(arr, (i1, i2) -> i2 - i1);
        System.out.println("Sorted arr[] : " + Arrays.toString(arr));
    }

Arrays.sort(arr); 이건 짐작하듯 오름차순 정렬
Arrays.sort(arr, (o1, o2) -> o2 - o1); 이게 내림차순 정렬(람다 표현식)이다.

사실 오름차순도 Arrays.sort(arr, (o1, o2) -> o1 - o2); 이 표현이 오름차 순인데 그냥 Arrays.sort(arr); 로 간단하게 쓴다.

결과

2차원 배열 정렬

1차원 배열 정렬과 동일한데 , 몇 번째 원소로 정렬할 것인지 index를 넣어준다.

    public static void main(String[] args) {
        int[][] arr = {{2, 4}, {6, 3}, {1, 5}};
        Arrays.sort(arr, (o1, o2) -> o2[1] - o1[1]);
        System.out.println(Arrays.deepToString(arr));
    }

결과

위 코드는 o2[1] - o1[1] 두번째 원소로 내림차순 정렬이다.

아래 코드를 참고하면 o1[n] - o2[n] 을 어떻게 써야하는지 알 수 있다.

Arrays.sort(arr, new Comparator<int[]>() {

    @Override
    public int compare(int[] o1, int[] o2) {
        return o1[0]-o2[0]; // 첫번째 숫자 기준 오름차순 
        return o2[0]-o1[0]; // 첫번째 숫자 기준 내림차순 
        return o1[1]-o2[1]; // 두번째 숫자 기준 오름차순 
        return o2[1]-o1[1]; // 두번째 숫자 기준 내림차순 
    }

참고

가끔 알고리즘 문제 속에, 첫번째요소는 오름차순, 두번째 요소에 대해서는 내림 차순으로 정리해야 할 때가 있다.
아래처럼 작성한다.

Arrays.sort(arr, (o1, o2) -> {
    if (o1[0] == o2[0]) { // 첫 번째 요소가 같을 때
        return o2[1] - o1[1]; // 두 번째 요소에 대해 내림차순 정렬
    } else {
        return o1[0] - o2[0]; // 첫 번째 요소에 대해 오름차순 정렬
    }
});

아래의 결과가 나온다.


Math 클래스

상단에 import java.lang.Math; 추가.
파이썬에서 쓰이던 웬만한 기능들을 사용 가능하다.
min(), max(), pow(),sqrt() 등등..

    public static void main(String[] args) {
        int a = -3;
        int b = 2;
        double c = 2.6;
        System.out.println((int)Math.pow(a,b));
        System.out.println(Math.abs(a));
        System.out.println(Math.max(a,b));
        System.out.println(Math.floor(c));
    }

결과

출처 : https://lktprogrammer.tistory.com/114#google_vignette

profile
Slow-starter

0개의 댓글