2023.01.09 : 1377 버블 소트

‍박예서·2023년 1월 9일

코딩테스트

목록 보기
16/27

1. 문제

2. 아이디어

  • 다음 C 코드는 버블 소트의 swap 을 한 횟수를 출력하는 코드이다.
  • 버블 소트에서 SWAP 을 하는 경우, 오른 쪽(더 큰 Index)에서 왼쪽(더 작은 index)으로는 한 번 밖에 옮겨질 수 없다.
  • 따라서 정렬 전 index - 정렬 후 index 의 최대값으로 버블 소트에서 swap 한 횟수를 알 수 있다.

3. 슈도 코드

for(i : 0 ~ N){
	if 정렬 전 index - 정렬 후 index > max :
    	max = 정렬 전 index - 정렬 후 index
}
print(max + 1)

4. 코드

import java.util.*;
import java.io.*;

class Main {  
  public static void main(String args[]) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int N = Integer.parseInt(br.readLine());
    Node[] node_list =new Node[N];

    for(int i = 0; i < N; i++){
      node_list[i] = new Node(i, Integer.parseInt(br.readLine()) );
    }

    Arrays.sort(node_list);

    int max = 0;
    for(int i = 0; i < N; i++){
      if(max < node_list[i].index - i) max = node_list[i].index - i;
    }

    System.out.println(max+1);
    
  }
}

class Node implements Comparable<Node>{
  int index;
  int value;

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

  @Override
  public int compareTo(Node n2){
    return this.value - n2.value;
  }
}

5. 느낀점 및 배운점

  • Comparable 과 Comparator 의 차이점을 숙지
  • 배열을 정렬 : Arrrays.sort(배열명) --> O(NlogN)

0개의 댓글