자바 코테 벼락치기..🥲(수학, Character, 리스트, Collections, Stack, [우선순위]Queue, HashMap, HashSet)

Minji Lee·2025년 3월 20일
0

JAVA

목록 보기
12/13

수학 관련 함수

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
int b = Integer.parseInt(br.readLine());
Math.pow(a, b); // a의 b제곱
Math.sqrt(a); // a의 제곱근

int[] arr = {1, 2, 3, 4, 5};
Arrays.stream(arr).sum(); // 배열 arr의 합

// 배열의 평균, average()가 리턴한 값이 없을 경우, null 대신 0 반환
double avg = Arrays.stream(arr).average().orElse(0); // 배열의 평균
Math.min(a,b);
Math.min(a,b);

Character 관련 함수

char c = 'A';
char k = 'B';
Character.toString(c); // char형 변수 c를 String으로 변환
Character.compare(c, k); // 비교 같으면 0 출력, 다르면 -1 반환
Character.isUpperCase(c); // c가 대문자이면 true
Character.isLowerCase(c); // c가 소문자이면 true
Character.isDigit(c); // c가 숫자이면 true
Character.isAlphabetic(k); // k가 알파벳이면 true

리스트와 배열 형변환

// String 배열 -> String 리스트
String[] arr = {"A", "B", "C"};
List<String> arrList = new ArrayList<>(Arrays.asList(arr));

// String 리스트 -> String 배열
String[] arr2 = arrList.stream().toArray(String[]::new);

// int 배열 -> int 리스트
int[] intArr = new int[]{1, 4, 3, 5, 2};
List<Integer> intList = Arrays.stream(intArr).boxed().collect(Collectors.toList());
Collections.reverse(intList); // 뒤집기

// int 리스트 -> int 배열
int[] intArr2 = intList.stream().mapToInt(i->i).toArray();

Collections 관련 함수

int[] intArr = new int[]{1, 4, 3, 5, 2};
List<Integer> intList = Arrays.stream(intArr).boxed().collect(Collectors.toList());

Collections.sort(intList); // 오름차순 정렬
Collections.sort(intList, Collections.reverseOrder()); // 내림차순 정렬
Collections.reverse(intList); // 뒤집기
Collections.frequency(intList, 2);
// 이분 탐색: 해당 값 있으면 해당 인덱스 반환, 없으면 해당 값보다 큰 첫번째 위치 반환
Collections.binarySearch(intList, -1); // -1

Stack 관련 함수

Stack<Integer> stack = new Stack<>();
stack.push(1); // 값 넣기
stack.contains(1); // 스택에 해당 값이 포함되어있으면 true
stack.peek(); // stack의 top 반환(제거X), 비어있으면 null 반환
stack.pop(); // 값 빼고 반환
stack.clear(); // 값 모두 삭제
stack.size();
stack.empty(); // 스택이 비어있으면 true

Queue 관련 함수

// 일반 큐
Queue<Integer> queue = new LinkedList<>();
// 우선순위 큐: 기본으로 낮은 숫자가 우선 순위를 가짐
PriorityQueue<Integer> pq = new PriorityQueue<>();
// 높은 숫자가 우선순위를 가지도록 선언
PriorityQueue<Integer> pq2 = new PriorityQueue<>(Collections.reverseOrder());

queue.add(1); // 값 추가, 큐가 꽉 찬 경우 에러 발생
queue.offer(2); // 값 추가, 큐가 꽉 찬 경우 false 반환
queue.poll(); // 첫번째 값 반환, 비어있으면 null 반환
queue.peek(); // 첫번째 값 출력(제거X)
queue.remove(); // 첫번째 값 제거
queue.clear(); // 값 모두 삭제

HashMap 관련 함수

  • HashMap: <key, value>쌍 출력하면, 순서가 안지켜짐
  • LinkedHashMap: 키 값이 입력 순으로 정렬되므로 순서가 지켜짐
  • TreeMap: 키 값이 알파벳순(오름차순)으로 정렬됨
HashMap<Integer, String> map = new HashMap<>();
LinkedHashMap<Integer, String> map2 = new LinkedHashMap<>();
TreeMap<Integer, String> map3 = new TreeMap<>();

map.put(1, "사과");
map.remove(1); // key값으로 요소 삭제
map.clear(); // 전체 삭제
map.containsKey(1); // key 값 중 해당 값이 있으면 true
map.containsValue("사과"); // value 값 중 해당 값이 있으면 true

map2.put(2, "바나나");
map2.put(1, "사과");

map3.put(3, "파인애플");
map3.put(1, "포도");
map3.put(2, "사과");

// 출력 방법1
for(Integer i : map2.keySet()){
    System.out.println(i + map2.get(i));
    // 2바나나
    // 1사과
}

for(Integer i : map3.keySet()){
    System.out.println(i + map3.get(i));
    // 1포도
    // 2사과
    // 3파인애플
}


// 출력 방법2
for(Map.Entry<Integer, String> entry : map2.entrySet()){
    System.out.println(entry.getKey() + entry.getValue());
    // 2바나나
    // 1사과
}

HashMap을 Value 기준으로 정렬하기

우선 Collections.sort() 사용하기 위해 List 형태로 Map을 가져와야함

Map<String, Integer> map = new HashMap<>();
map.put("a", 3);
map.put("b", 2);
map.put("c", 1);

List<Map.Entry<String, Integer>> entryList = new LinkedList<>(map.entrySet());

1. Entry 내장 함수 사용

entryList.sort(Map.Entry.comparingByValue());
for(Map.Entry<String, Integer> entry : entryList) {
    System.out.println("key: "+ entry.getKey()+", value: "+entry.getValue());
    /**
     * key: c, value: 1
     * key: b, value: 2
     * key: a, value: 3
     */
}

2. comparator 사용

entryList.sort(new Comparator<Map.Entry<String, Integer>> () {
    @Override
    public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
        return o1.getValue() - o2.getValue();
    }
});

for(Map.Entry<String,Integer> entry : entryList){
    System.out.println("key: "+entry.getKey()+", value: "+entry.getValue());
}

3. 람다 함수 사용

entryList.sort(((o1, o2) -> map.get(o1.getKey()) - map.get(o2.getKey())));
for(Map.Entry<String,Integer> entry : entryList){
    System.out.println("key: "+entry.getKey()+", value: "+entry.getValue());
}

HashSet관련 함수

  • HashSet: 중복 허용 X, 순서 X, 정렬 X
  • LinkedHashSet: 중복 허용 X, 삽입된 순서대로 순서 관리
  • TreeSet: 중복 허용 X, 이진탐색트리 형태로 데이터 저장
HashSet<Integer> set = new HashSet<>();
LinkedHashSet<Integer> set1 = new LinkedHashSet<>();
TreeSet<Integer> set2 = new TreeSet<>();

set.add(1); 
set.add(2);
set.contains(1);
set2.add(1);
set2.add(4);
set.remove(1); // 값 삭제
set.removeAll(set2); // set 데이터 중 set2에 들어있는 데이터 삭제
set.retainAll(set2); // set 데이터 중 set2에 들어있찌 않은 데이터 삭제
set.clear();

// 출력방법1
for(Integer item : set2){
    System.out.println(item);
}

// 출력방법2
Iterator<Integer> iter = set2.iterator();
while(iter.hasNext()){
    System.out.println(iter.next());
}

StringBuilder

String을 좀 더 효율적으로 사용할 수 있도록 하는 클래스

  • String 객체끼리 더할 때 덧셈 연산이 많아져 성능이 좋지 않음! String 객체는 변경 불가능하므로 다른 문자열과 연결하면 새 문자열이 생성되고, 이전 문자열은 가비지 컬렉터로 들어감!
StringBuilder sb = new StringBuilder();
sb.append("문자열1>>").append("문자열2");

String str = sb.toString();
System.out.println(sb); // 문자열1>>문자열2
System.out.println(str); // 문자열1>>문자열2

StringBuilder


알아두면 좋은 기술

  • ArrayList의 indexOf: 특정 value가 없으면 -1 반환
  • ArrayList값 하나씩 가져와서 int배열에 넣을 때: arr[i] = list.get(i).intValue();

[Java]코딩테스트 벼락치기 정리 2편
[Java] 코딩테스트 문법 속성 정리 (2)
[Java] HashMap Value 기준으로 정렬하기
Java 코딩테스트 관련 팁

0개의 댓글