[Java] 코딩테스트를 위한 문법

장선규·2023년 5월 5일
1

알고리즘

목록 보기
39/40

기본 배열

길이: arr.length

  • 선언

    int[] arr = new int[3];
    int[] arr = {1,2,3}; 
    int[] arr = new int[] {1,2,3};
  • 길이

    int n = arr.length; // 3
  • 배열 -> List

    List<String> list = Arrays.asList(arr);
  • 정렬

    int arr[] = {10, 8, 11, 2, 3, 0};
    
    // 오름차순 {0, 2, 3, 8, 10, 11}
    Arrays.sort(arr);
    
    // 내림차순 {11, 10, 8, 3, 2, 0}
    Arrays.sort(arr, Collections.reverseOrder());
  • 이진탐색

    Arrays.binarySearch(arr, 2); // -> index
  • 값 추가 (append)

    Java의 기본 배열은 고정 크기의 데이터라서 처음에 초기화하지 않고 동적으로 값을 추가하는 것이 불가능하여 List형으로 변환하는 작업을 수행해야 한다. (반복문으로 하면 됨)

    따라서 자바에서 배열에 동적으로 추가, 수정, 삭제 작업을 많이 하는 경우에는 List형을 쓰도록 하자. (기본 배열은 고정 크기일때나 읽기용으로 쓰자)

  • 비교

    // arr1==arr2 <- 이 방식은 사용하면 안 됨
    
    Arrays.equals(arr1, arr2);
  • 2차원배열

      int[][] arr1 = new int[][] 
      {
        {1, 2},
        {3, 4},
        {5, 6}
      };
    
      int[][] arr2 = new int[5][5];

Collection

대부분
길이: collection.size()
접근: collection.get(index)
추가: collection.add(5)
비어있는지 유무: collection.isEmpty()
배열화: collection.toArray() -> Object[]

  1. List
  • 선언

    List<Integer> list = new ArrayList<>();
    List<Integer> list = new ArrayList<>(map); // <- map의 key들이 list에 담김
    List<Integer> list = new ArrayList<>();
    
  • 초기화

    List<Integer> list = Arrays.asList(1,2,3);
    List<Integer> list = List.of(4,5,6);
    
  • 추가, 추출, 변경, 삭제 등

    list.add(val); // 추가
    list.get(index); // 추출
    list.set(index, val); // 변경
    list.remove(index); // 삭제
    
    list.contains(val); // 값 존재 유무
    list.containsAll(collection); // 값 전체 존재 유무
    list.addAll(collectinon); // 전부 추가
    list.isEmpty(); // 비었는지 확인
  • 정렬

    // List 내장 메소드
    list.sort(Comparator.naturalOrder());
    list.sort(Comparator.reverseOrder());
    
    // Collections 클래스 사용
    Collections.sort(list);
    Collections.sort(list, Collections.reverseOrder());
  • 비교

    list1.containsAll(list2); // containsAll 사용, 순서 달라도 true 
    // (sort 사용하면 순서 보장)
  • iterator 사용

    // iterator 선언
    Iterator<Integer> it = list.iterator();
    
    // 인덱스 오름차순 순회
    while (it.hasNext()) {
        ...
    }
    
    // 인덱스 내림차순 순회
    while (it.hasPrevious()) {
        ...
    }
    
    // 순회하면서 삭제
    for (Iterator<Integer> it = list.iterator(); it.hasNext();) {
        int x = it.next();
        if(x == 5)
            it.remove();
    }
  • List -> String

    List<Integer> list = new ArrayList<>();
    String str = list.toString(); // 
  1. Queue
  • 선언
    Queue<Integer> queue = new LinkedList<>();
  • 값 추가: queue.add(val)
  • 값 추출: quque.poll()
  • 값 확인: queue.peek()
  • 비었는지 확인: queue.isEmpty() <- 보통 while문 돌릴 때 사용
  1. Stack
    이놈도 add(특정위치), get 사용 가능하지만 push, pop을 사용하는게 좋음.
  • 값 추가: stack.push(val)
  • 값 추출: stack.pop()
  • 값 확인: stack.peek()
  • 비었는지 확인: stack.isEmpty(), stack.empty() <- 왜 두개일까...
  1. Set
  • 선언
    Set<Integer> set = new HashSet<>();
    Set<Integer> set = new TreeSet<>();
    • HashSet은 해싱으로 구현해서 속도 빠름
    • TreeSet은 레드블랙트리로 구현되어있어서 정렬이 되어있고 검색 빠름, 추가 삭제는 조금 느림
  • 값 추가: set.add(key)
  • 값 확인: set.contains(key)

Map

길이: map.size()
접근: map.get(key)
추가: map.put(key, val)
존재 유무 확인: map.containsKey(key) -> boolean

// containsKey()로 존재유무 확인
if (!map.containsKey("key")) map.put("key", 1);

// 특정 키가 없으면 기본값 설정, 있으면 기존 값 가져오는 함수
map.put("key", map.getOrDefault("key", default_value);	

// keySet() <- key들을 뽑음, 
for(String key : map.KeySet()) {		
	map.get(key);
}

//valueSet() <- value들을 뽑음
Set<Type> vs = map.valueSet();

String

길이: str.length()
접근: str.charAt(index) -> char

  • 비교

    str1.equals(str2); // -> boolean
    str1.compareTo(str2); // -> int, str1 < str2 면 -1, 같으면 0, str1 > str2 면 1
    • 절대 == 로 비교하지 말 것
  • 존재 유무 판단

    str.contains(string) // <- 문자열의 존재 유무임
  • 문자열 <-> int

    • 문자열 -> int
       String s = "25";
       int n = Integer.parseInt(s); // 25
    • int -> 문자열
       int n = 25;
       String s = String.valueOf(n); // "25"
       String s = Integer.toString(n); // "25"
  • 문자열 -> List

    // join()을 사용한다
    List<String> list = List.of("hello","123","world");
    String str = String.join("", list); // hello123world
    • List<String> 일때만 가능
  • split

    String[] strings1 = str.split(""); // 모든 글자 split
    String[] strings2 = str.split(" "); // 공백 단위로 split
    • return 값은 String[]
  • substring

    String s = "Hello Java";
    s.substring(0, 4);  // "Hell"
    • substring(start,end)에서 start는 포함, end는 미포함

Comparator

정렬하거나 값 비교해야 될 때 사용하는 클래스.
보통은 특정 값으로 정렬해야 할 때 사용.

public class ListComparator implements Comparator<CityInfo>{
	
	@Override
	public int compare(CityInfo o1, CityInfo o2) {
		
		int todayTotal1 = Integer.parseInt(((CityInfo)o1).getTodayTotal());
		int todayTotal2 = Integer.parseInt(((CityInfo)o2).getTodayTotal());
		
        if(todayTotal1 > todayTotal2){
            return -1;
        }else if(todayTotal1 < todayTotal2){
            return 1;
        }else{
            return 0;
        }
	}
}
  • 원하는 클래스에 대해 Comparator를 만들고, Comparator 클래스를 implemet 해준다.
  • compare 메소드를 오버라이딩 해줘서 우선순위를 정해줌
profile
코딩연습

0개의 댓글