본문 바로가기
개발공부/코딩테스트

[Java] 코딩테스트에 필요한 Java 기초 정리

by 양히◡̈ 2023. 3. 25.

Int vs long

-> 들어갈 인수 범위가 너무 넓다 싶으면 long을 사용하자!

 

Scanner vs bufferedReader

-> 입력 데이터가 많으면 시간을 단축하기 위해 bufferedReader를 쓰자!

-> Scanner는 파싱할 필요가 없어서 간단하지만 빠른건 BufferedReader

 

++i, i++ (전위연산자, 후위연산자)

-> 나 먼저, 다른거 먼저

배열 인덱스로 이해하면 쉽다

Array A[];
int i=0;
A[++i] = 10; //A[1]로 먼저 바뀌고 10이 담김
A[i++] = 10; //A[1]에 10을 담고 i가 2가 됨

 

Array 정렬

Arrays.sort(A); //오름차순

Arrays.sort(A, Collections.reverseOrder()); //내림차순

*Collections.reverseOrder 는 객체배열만 가능함. int는 안되고 Integer로 해야함

* int 배열을 내림차순 하고 싶다면 아래 방법 사용

//방법
int arr[] = {5, 3, 2, 4, 1};
Integer[] temp = Arrays.stream(arr).boxed().toArray(Intger[]::new);

Arrays.sort(temp, Collections.reverseOrder());
Arrays.toString(temp); //결과 : [5, 4, 3, 2, 1]

 

 

sort vs Compareable

-> sort : 단일기준 / Compareable : 기준 여러개

ex) 영어 점수가 높은 학생 순으로 정렬하되 영어 점수가 같으면 수학점수가 높은 학생을 선순위로 정렬

생성자로 객체를 만들고 compareTo() 를 사용하여 구현

 

 

static 변수

-> 메모리 할당을 1번만

어느 곳에서나 변수를 공유하기 때문에 파라미터로 넘기고 받을 필요가 없이 변경이 가능함

 

 

for vs while

-> for : 범위반복 / while : 조건반복

조건반복 예제 ⤵️

// Queue가 비워질 때까지 큐 내용을 반복하여 출력하기, 단 짝수가 들어왔을 경우 2로 나눈 몫을 큐에 삽입
Queue<Integer> queue = new LinkedList<Integer>();
queue.add(10);
queue.add(5);
queue.add(4);

while(!queue.isEmpty()) {
	int value = queue.poll(); //poll : queue의 맨 앞 요소를 반환하고 queue에서 제거
    if (value % 2 == 0) { //짝수
    	queue.add(value / 2);
    }
    System.out.println(value + " ");
}

 

 

if vs switch

-> if : 변수 범위에 대한 제어 / switch : 변수 하나의 값에 대한 제어

 

 

정답을 XX로 나눈 나머지 출력

-> MOD연산의 특성을 이용하기

덧셈/뺄셈/곱셈에 분배 법칙이 성립한다. 그래서 전체 연산을 한 후 Mod연산을 하거나, 중간에 해도 결과가 똑같다!

* 나눗셈에 대해서는 분배법칙이 성립하지 않는다

-> 정답을 모두 구하고 나서 나머지 연산을 하는 것이 아니라 각 스텝마다 나머지 연산을 해야 한다

-> 어짜피 덧뺄곱셈은 분배법칙이 성립하므로 이러한 문제가 나오면 각 스텝마다 나머지 연산을 해주는 것이 좋겠다

 

 

ArrayList 배열로 그래프 문제 풀이

//초기화
ArrayList<Edge> list[] = new ArrayList[10];

//할당
for (int i=0; i<10; i++){
	list[i] = new ArrayList<Edge>();
}

//그래프 데이터 저장하기
for (int i=0; i<E; i++){ // E:저장할 엣지 수
	String st = new StringTokenizer(br.readLine());
    int s = Integer.parseInt(st.nextToken());
    int e = Integer.parseInt(st.nextToken());
    int v = Integer.parseInt(st.nextToken());
    list[s].add(new Edge(e,v));
}

//그래프 데이터 가져오기
//특정 노드에 연결된 엣지 정보 : ex_2번쨰 노드
for (int i=0; i<list[2].size(); i++) {
	Edge temp = list[2].get(i);
    int next = temp.endNode;
    int value = temp.value;
}

 

 

 

본 글은 아래 유튜브를 보고 내용을 정리하였습니다.

https://www.youtube.com/watch?v=x-cYdsjfVKU&list=PLFgS-xIWwNVXv1mM7cH1X4ycjB47z1EL-&index=1 

댓글