Java 알고리즘 문제 풀이 팁

Jeeseob·2022년 1월 30일
3

취준을 위한 코딩테스트에는 파이썬이 유리하다는 이야기를 많이 들었고, 때문에 계속 파이썬으로 알고리즘 문제를 풀어왔다..

그러던 중 그래도 스프링 프레임워크를 공부하면서 메인 언어로 사용 중인 자바로도 알고리즘 문제들을 풀 수 있어야 하지 않을까 라는 생각에 자바로 문제를 풀어 봤지만..

어떤 방식으로 풀어야되는지는 알겠는데 그걸 어떻게 구현해야할지 막히는 문제가 발생하였다...


나름대로 Spring/SpringBoot를 게속 사용했고, 학교에서 디자인패턴도 공부하면서 자바 문법에 익숙해져 있다고 생각했는데 알고리즘 문제풀이에는 또다른 것들이 필요했다.

지금부터 계속 자바로 알고리즘 문제를 풀면서 얻게되는 팁들을 이 글에 지속적으로 추가해 나갈 것이다.


배열(Array)


  1. Sort시 정렬방법 변경
// 2022/01/30
Arrays.sort(tempArray); // 오름차순 
Arrays.sort(tempArray,  Collections.reverseOrder()); //내림차순

// 오름차순 (compare함수를 변경하면, 비교방식 변경 가능)
Arrays.sort(answer, new Comparator<Integer>() {
	@Override
	public int compare(Integer o1, Integer o2) {
		return answer[o1] - answer[o2];
	}
});

  1. Array.sort Lambda식 사용하기
//2022/02/07 
Integer[] answer;
Arrays.sort(answer, (o1, o2) -> o1 - o2);

// 3-2 응용
Integer[][] answer; // 각 row의 0번째 index를 기준으로 정렬
Arrays.sort(answer,(o1,o2) -> o1[0] - o2[0]);

  1. 부분배열(subArray) 가져오기
// 2022/02/07
int[] answer = Arrays.copyOfRange(originalArray, startIndex, endIndex);

자료구조

  1. HashMap에서 값을 String형태로 빼오는 코드
// 2022/01/30
String temp = answerHashMap.keySet().toString(); // key
String temp = answerHashMap.values(); // value
 
// temp는 "[String1, String2]" 형태가 된다.
answer = temp.substring(1, temp.length()-1);
// 처음과 마지막의 [,]를 substring 메소드로 제거하는 것이다.

형변환

  1. ArrayList<Integer>를 int[] 로 변경하는 방법
// 2022/02/03
ArrayList<Integer> answerArrayList = new ArrayList<>();
  
// 기본적인 방법  
int[] answer = answerArrayList.stream().mapToInt(i->i).toArray();
  
// 필터를 적용시켜서 null값을 제외하는 코드
int[] answer2 = answerArrayList.stream().filter(i-> i!=null).mapToInt(i->i).toArray();
  

객체지향

  1. 처리 해야하는 데이터가 복잡한 경우 객체를 새로 만들어서 자료구조에 객체를 저장하여 해결한다.

문제 : 프로그래머스 > 코딩테스트 연습 > 스택/큐 > 프린터
https://programmers.co.kr/learn/courses/30/lessons/42587

// 2022/02/07
class DocumentData {
    private int priorty;
    private int location;

    public DocumentData(int priorty, int location) {
        this.priorty = priorty;
        this.location = location;
    }

    public int getPriorty() {
        return priorty;
    }

    public int getLocation() {
        return location;
    }
}

전체 풀이 코드 :
https://github.com/Jeeseob/Algoritm_Study/blob/master/Programmers/PracticeCodingTest/src/StackQueue/StackQueue2/Solution.java

profile
Computer System을 공부하는 대학원생 입니다.

0개의 댓글