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
'개발공부 > 코딩테스트' 카테고리의 다른 글
[JAVA] 프로그래머스 코딩테스트 - 바탕화면 정리 (0) | 2023.04.01 |
---|---|
[JAVA] 프로그래머스 코딩테스트 - 추억 점수 (0) | 2023.03.31 |
[JAVA] 프로그래머스 코딩테스트 - 둘만의 암호 (0) | 2023.03.26 |
[JAVA] 프로그래머스 코딩테스트 - 개인정보 수집 유효기간 (0) | 2023.03.26 |
댓글