코딩테스트/자료구조

자료구조 총 정리

초코chip 2024. 7. 11. 18:21

일반 배열 (int[])

  • java.util.Arrays 사용
기능 설명
생성 int[] arr = new int[n];
접근 XX
삽입, 삭제 XX
길이 arr.length
최대, 최소 Arrays.stream(arr).max().orElse(-1)
초기화 Arrays.fill(arr, 1);
정렬 Arrays.sort(arr);
전체 출력 Arrays.toString(arr);

일반 객체 배열 (Class[])

  • Comparator<> 전달
기능 설명
생성 Class[] arr = new Class[n];
접근 arr[i]
삽입, 삭제 XX
길이 arr.length
최대, 최소 Arrays.stream(arr).max((c1, c2) -> c1.x - c2.x).orElse(null);
초기화 XX
정렬 1. 오름차순 Arrays.sort(arr, (c1, c2) -> c1.x - c2.x); 2. 내림차순 Arrays.sort(arr, (c1, c2) -> c2.x - c1.x);
전체 출력 Class 내부에 public String toString() 메서드 오버라이딩 구현 Arrays.toString(arr);

리스트 (ArrayList)

  • java.util.Collections 사용
기능 설명
생성 List<Integer> list = new ArrayList<>();
접근 list.get(i);
삽입 list.add(i); //맨 뒤 삽입 list.add(i, b); //번째 삽입
삭제 list.remove(i); //번째 제거 list.remove(Integer.valueOf(i)); //값 제거
길이 list.size();
최대, 최소 Collections.max(list);
초기화 Collections.fill(list, i);
정렬 Collections.sort(list); //오름차순 Collections.sort(list, Collections.reverseOrder()); //내림차순
전체 출력 list.toString();

객체 리스트 (ArrayList)

  • Comparator<> 전달
기능 설명
생성 List<Class> list = new ArrayList<>();
접근 list.get(i);
삽입 list.add(new Class()); //맨 뒤 삽입 list.add(i, new Class()); //번째 삽입
삭제 list.remove(i); //번째 제거
길이 list.size();
최대, 최소 Collections.max(list, (c1, c2) -> c1.x - c2.x);
초기화 XX
정렬 Collections.sort(list, (c1, c2) -> c1.x - c2.x); //오름차순 Collections.sort(list, (c1, c2) -> c2.x - c1.x); //내림차순
전체 출력 Class 내부에 public String toString() 메서드 오버라이딩 구현 list.toString();

문자열 인덱스 배열

  • HashMap<> 사용
기능 설명
생성 Map<String, String> map = new HashMap<>();
접근 String v = map.get(key);
키 접근 Set<String> keys = map.keySet();
삭제 map.remove(key);
전체 출력 map.toString();

스택 (Stack)

  • java.util.Stack 사용
기능 설명
생성 Stack<Integer> s = new Stack<>();
삽입 s.push(1);
삭제 s.pop();
조회 s.peek();
전체 조회 s.toString();
empty s.isEmpty();

큐 (Queue)

  • java.util.Queue 사용
기능 설명
생성 Queue<Integer> q = new LinkedList<>();
삽입 q.offer(1);
삭제 q.poll();
조회 q.peek();
전체 조회 q.toString();
empty q.isEmpty();

우선순위 큐 (PriorityQueue)

  • java.util.PriorityQueue 사용
  • Comparator<> 전달
기능 설명
생성 PriorityQueue<Class> pq = new PriorityQueue<>((c1, c2) -> c1.x - c2.x);
삽입 q.offer(1);
삭제 q.poll();
조회 q.peek();
전체 조회 q.toString();
empty q.isEmpty();

덱 (Deque)

  • java.util.Deque 사용
기능 설명
생성 Deque<Integer> dq = new LinkedList<>();
앞 삽입 dq.offerFirst(1);
뒤 삽입 dq.offerLast(2);
앞 삭제 dq.pollFirst();
뒤 삭제 dq.pollLast();
앞 조회 dq.peekFirst();
뒤 조회 dq.peekLast();
전체 조회 dq.toString();
empty dq.isEmpty();

노드 관점 가중치 그래프

ArrayList<ArrayList<Integer>> graph = new ArrayList<ArrayList<Integer>>(); 
// 노드 개수만큼 추가 
for (int i = 1; i <= n; i++) { 
    graph.add(new ArrayList<Integer>()); 
} 

StringTokenizer st; 
for (int j = 0; j < m; j++) { 
    st = new StringTokenizer(br.readLine()); 
    int s = Integer.valueOf(st.nextToken()); 
    int e = Integer.valueOf(st.nextToken()); 
    graph.get(s).add(e); 
} 

노드 관점 가중치 그래프

class Node { 
    int index; 
    int distance; 

    public Node(int index, int distance) { 
        this.index = index; 
        this.distance = distance; 
    } 
} 

ArrayList<ArrayList<Node>> graph = new ArrayList<ArrayList<Node>>(); 
// 노드 개수만큼 추가 
for (int i = 1; i <= n; i++) { 
    graph.add(new ArrayList<Node>()); 
} 

StringTokenizer st; 
for (int j = 0; j < m; j++) { 
    st = new StringTokenizer(br.readLine()); 
    int s = Integer.valueOf(st.nextToken()); 
    int e = Integer.valueOf(st.nextToken()); 
    int w = Integer.valueOf(st.nextToken()); 
    graph.get(s).add(new Node(e, w)); 
} 

간선 관점 그래프

class Edge implements Comparable<Edge> { 
    int distance; 
    int nodeA; 
    int nodeB; 

    public Edge(int distance, int nodeA, int nodeB) { 
        this.distance = distance; 
        this.nodeA = nodeA; 
        this.nodeB = nodeB; 
    } 
} 

ArrayList<Edge> edges = new ArrayList<>(); 
// 모든 간선에 대한 정보를 입력 받기 
for (int i = 0; i < e; i++) { 
    int a = sc.nextInt(); 
    int b = sc.nextInt(); 
    int cost = sc.nextInt(); 
    edges.add(new Edge(cost, a, b)); 
} 

노드 관점 문자 노드 그래프

'코딩테스트 > 자료구조' 카테고리의 다른 글

7. 그래프  (0) 2024.04.12
6. 우선순위 큐(PriorityQueue)  (0) 2024.04.12
5. 덱(Deque)  (0) 2024.04.12
4. 큐(Queue)  (0) 2024.04.12
3. 스택(Stack)  (0) 2024.04.12