본문

151226A(토)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {

 public static void main(String[] args) {
  int T = 0;
  int N = 0;
  int result;
  
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  
  try {
   T = Integer.parseInt(br.readLine());
  } catch (NumberFormatException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }

  ArrayList<Integer> intMen = new ArrayList<Integer>();
  ArrayList<Integer> intWom = new ArrayList<Integer>();

  for(int j = 0; j < T; j++) {
   result = 0;
   
   try {
    N = Integer.parseInt(br.readLine());
   } catch (NumberFormatException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

   intMen = inputInteger(intMen, N);
   intWom = inputInteger(intWom, N);

   quickSort(intMen, 0, intMen.size() - 1);
   quickSort(intWom, 0, intWom.size() - 1);
   
   for(int k = 0; k < N; k++) {
    result = result + Math.abs(intMen.get(k) - intWom.get(k));
   }
   
   System.out.println(result);
  }
 }

 public static void quickSort(ArrayList<Integer> a, int leftmost, int rightmost) {
  if(rightmost - leftmost <= 0) {
   return;
  }
  else {
   int pivot = a.get(rightmost);
   
   int i = leftmost - 1;
   int j = rightmost;
   
   while(true) {
    while(a.get(++i) < pivot);
    
    while(j > leftmost && a.get(--j) > pivot);
    
    if(i >= j)
     break;
    else
     swap(a, i, j);
   }
   swap(a, i, rightmost);
   
   quickSort(a, leftmost, i - 1);
   
   quickSort(a, leftmost + 1, rightmost);
  }
 }
 
 public static void swap(ArrayList<Integer> a, int i, int j) {
  int temp;
  temp = a.get(i);
  a.set(i, a.get(j));
  a.set(j, temp);
 }
 
 public static ArrayList<Integer> inputInteger(ArrayList<Integer> inputArr, int memNum) {
  BufferedReader bri = new BufferedReader(new InputStreamReader(System.in));
  StringTokenizer token = null;
  try {
   token = new StringTokenizer(bri.readLine());
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  while(token.hasMoreTokens()) {
   inputArr.add(Integer.parseInt(token.nextToken()));
  }

  return inputArr;
 }
}

 


 

질문과 답변 게시판에 어떤분께서 Scanner 대신에 BufferdReader를 사용해보라고 답변을 달아주셨다.

답변대로 BufferedReader를 사용하여 StringTokenizer로 공백을 끊어서 입력받았다.

결과는 시간초과이다.

알아보니 go, java 등 C++언어가 아니면 시간초과가 꽤 많이 발생한다고 한다.

이문제는 여기서 마무리하고 내일은 다른문제를 풀겠다.

'Architecture > ACM-ICPC' 카테고리의 다른 글

160106A(수)  (0) 2016.01.07
160103A(일)  (0) 2016.01.03
160103A(일)  (0) 2016.01.03
151222A(화)  (0) 2015.12.23
151221A(월)  (0) 2015.12.21

공유

댓글