[코테] Java 코테 벼락치기

김재연·2023년 8월 25일
11
post-thumbnail

파이썬으로 공부하다가 큰맘먹고 신청한 인생 첫 코테가 자바만 된다니 ㅋㅋㅋㅋㅋㅋㅋ

하..... 진짜 하나도 안웃김

급하니까 중요한 부분만 자바로 옮겨보는 연습을 했다.


0. 기본문법

일단 기본 문법은 다른사람이 정리해둔거 참고

❗❗❗맨 위에 import java.util.*; 꼭꼭꼭꼭 붙이기❗❗❗


1. DFS

import java.util.*;

class Solution {
    int N = 9; // 편의상 사용 (노드개수+1을 의미)
    // graph와 visited는 매개변수로 안넘기고 이렇게 밖에서 선언해서 아무데서나 접근
    ArrayList<ArrayList<Integer>> graph = new ArrayList<>(); // 인접리스트
    boolean[] visited = new boolean[N]; // 단순배열
    
    public String solution(String rny_string) {
        String answer = "";

        // 그래프 만들기
        for(int i=0;i<N;i++) {
            graph.add(new ArrayList<>()); // 내부 ArrayList 할당
        }
        graph.get(1).add(2); // graph[1].append(2)와 동일
        graph.get(2).add(1); // 이후 나머지는 생략
        
        // visited 초기화
        for(int i=0;i<N;i++) {
            visited[i] = false; // False 아니고 false
        }
        
        // 1부터 시작
        dfs(1);
        
        return answer;
    }
    
    public void dfs(int v) { // 매개변수로 현재노드만 받아옴
        System.out.println(v); // 이후 로직은 동일
        visited[v] = true;
        for (Integer nextNode : graph.get(v)) {
            if (visited[nextNode] == false){
                dfs(nextNode);
            }
        }
    }
}

2. BFS

import java.util.*;

class Solution {
    int N = 9;
    ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
    boolean[] visited = new boolean[N];
    
    public String solution(String rny_string) {
        String answer = "";

        // 그래프 만들기, visited 초기화 부분은 위에 쓴 DFS와 동일
        
        // 1부터 시작, 로직은 동일
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(1);
        visited[1] = true;
        int now = 0;
        
        while (!queue.isEmpty()) {
            now = queue.poll();
            System.out.println(now);
            for(Integer next : graph.get(now)) {
                if (visited[next] == false) {
                    queue.offer(next);
                    visited[next] = true;
                }
            }
        }
        
        return answer;
    }
}

3. 2차원배열

(1) 배열 + 배열

행과 열의 길이를 둘다 확실히 알고 그 길이가 고정일때만 사용

int n = 5;
int[][] graph = new int[n + 1][n + 1];

(2) 배열 + ArrayList

행의 수는 고정인데 열의 수가 가변일 때 사용 가능

ArrayList<Integer>[] list = new ArrayList[n + 1];

for (int i = 0; i <= n; i++) {
	list[i] = new ArrayList<>();
}
		
for(int[] edge : edges) {
	list[edge[0]].add(edge[1]);
	list[edge[1]].add(edge[0]);
}

(3) ArrayList + ArrayList (⭐)

행과 열 모두 모를 때도 사용 가능

ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
for (int i = 0; i <= n; i++) {
	graph.add(new ArrayList<>());
}
graph.get(n1).add(n2);

4. 문자열 한글자씩 쪼개기

String str = "my string"

for (String s : str.split("")) {
	Sytem.out.println(s);
}

for (int i=0;i<str.length();i++) { // <- 이 방법이 더 좋은듯 (빠름)
	Sytem.out.println(str.charAt(i));
}

5. 배열, 문자열, 리스트의 길이

  • 배열 : length
  • 문자열 : length()
  • 리스트 : size()
int[] array = new int[7];
System.out.println(array.length); // 7

String str = "string";
System.out.println(str.length()); // 6

ArrayList<Object> list = new ArrayList<Object>();
System.out.println(list.size()); // 0

6. 배열/리스트에 접근/추가하기

  • 배열 = 고정된 길이
    • 접근 : array[인덱스]
    • 추가 : array[인덱스]=값
  • 리스트 = 가변 길이
    • 접근 : list.get(인덱스)
    • 추가 : list.add(값)
int[] array = new int[7];
array[0]; // 접근
array[0] = 0; // 추가

List<Integer> list = new ArrayList<>();
list.get(0); // 접근
list.add(0); // 추가

7. 전역변수와 함수선언

class Solution {
    boolean[] visited; // 전역변수 선언해두고
    
    void dfs(int[][] graph, int v) { // 굳이 public 안써도 되는듯
        // ...
    }
    
    public int solution(int n, int[][] computers) {
        visited = new boolean[n]; // 여기서 할당
        // ...
    }
}

변수선언이나 자료형변환 이런것만 잘 어찌저찌하면 알고리즘 자체는 똑같긴하다..

profile
일기장같은 공부기록📝

0개의 댓글