Algorithm/문법 정리

[알고리즘/JAVA] 자바 문법 정리

dbfl9911 2024. 9. 18. 22:08
반응형

 


 

- 문자열 관련 

String str = "abcde";

str.charAt(2) // 인덱스로 문자 찾기, c 반환
str.equals("abcde"); // str과 abcde를 비교해서 같으면 true, 다르면 false
// 문자열에 포함된 기존 문자를 -> 바꿀문자로 치환
str.replace("b", "t"); // 결과는 "atcde" 이다
str.replaceAll("0",""); // 모든 0을 제거
str.substring(1); // 1번째 문자부터 끝 문자까지 자름
str.split(" "); // 띄어쓰기로 구분된 문자열 분리해서 String[] 배열 반환
                // String[] arr = str.split(" ");
str.split(" ", -1); // 모든 공백을 유지하고, 연속된 공백도 빈 문자열로 처리

 

 

- String.format

문자열 형식 설정할 때 사용

// 문자열 소수점 4째자리까지 형태일 때
String.format("%s %.4f%n", s, percentage);

 

// 시분초 HHMMSS 형식으로 포맷 (EX) 11시 01분 00초)
for(int h = 0; h <= N; h++) { // 시
            for(int m = 0; m <= 59; m++) { // 분
                for(int s = 0; s <= 59; s++) { // 초
                   // 현재 시각을 HHMMSS 형식으로 포맷
                    String time = String.format("%02d%02d%02d", h, m, s);

                    if(time.contains(K)) {
                        count++;
                    }
                }
            }
        }

 

- String과 StringBuilder의 차이 ??
• StringBuilder는 가변 객체이므로, 기존 객체를 그대로 사용하여 문자열을 수정할 수 있습니다.
• 문자열을 추가하거나 삭제하는 작업이 반복될 때마다 새로운 객체를 생성하지 않기 때문에, 성능이 뛰어나고 메모리 효율이 높습니다.
• 문자열을 반복적으로 수정하는 상황에서는 항상 String보다 StringBuilder가 더 효율적입니다.

StringBuilder sb = new StringBuilder();
sb.append("abc"); // 문자열 추가
sb.length(); // sb의 길이
// 문자열로 변환
sb.toString();
// 안에 있던 문자열 초기화
sb.setLength(0);

 


 

 

- StringTokenizer

공백(구분자)를 기준으로 문자열을 나눠준다.

StringTokenizer st = new StringTokenizer(br.readLine());


StringTokenizer.countTokens() // 현재 가지고있는 토큰의 개수를 반환

 

 

 


 

- 숫자 -> 문자열 변환

String.valueOf();
Integer.toString();
Long.toString();

 

 

- 숫자 변환

Integer.parseInt();
Long.parseLong();

Integer.parseInt()는 문자열을 숫자로 변환할 때 사용하는 메서드로 char 변환에는 부적합합니다. ( char 타입을 int로 변환하려면 ASCII 값을 직접 활용하거나 Character 관련 메서드를 사용해야 합니다.)

 

- 숫자 -> 이진수로 변환

Integer.toBinaryString(4); // 110

 

- 정렬 관련 함수

Arrays.sort()는 1차원 배열에만 사용 가능하다

ArrayList<String> list = new ArrayList<>();
Collections.sort(list);

-- 역순 정렬 관련
String[] str = Long.toString(n).split("");
Arrays.sort(str, Collections.reverseOrder());

 


- ArrayList 관련

ArrayList<String> list = new ArrayList<>();
ArrayList<Integer> list2 = new ArrayList<>();

list.add("안녕"); // 값 추가 
list.get(0); // 0 위치의 값 반환
list2.contains(1); // 1이라는 값이 포함되어 있으면 true, 아니면 false

// HashMap.values()로 값 추출 후 리스트에 저장 -> 값이 리스트에 저장됨
 ArrayList<Integer> list = new ArrayList<>(hm.values());
// 배열은 Arrays.sort()로 정렬하고 ArrayList는 Collections.sort로 정렬하기
 Collections.sort(list, Collections.reverseOrder());

 


 

- Stack 관련

Stack<Integer> stack = new Stack<>();
stack.push(1); // stack에 1 삽입
stack.pop(); // 가장 위에 있는 값 삭제
stack.size(); // 크기 반환
stack.empty() // 비어있으면 true, 아니면 false
stack.peek() // 가장 위에 있는 값 출력 (제거 X), 비어있으면 null 반환

- Queue 관련

Queue<Integer> queue = new LinkedList<>();

queue.add(1); // 큐에 1추가
queue.size(); // 큐 사이즈
queue.poll(); // 큐의 첫번째 값 반환(제거o)
queue.peek(); // 큐의 첫번째 값 출력(제거x)
queue.isEmpty(); // 비어있으면 true , 안 비어있으면 false
queue.contains(1); // 큐에 1이 있다면 true, 없다면 false
queue.remove(a); // 큐에서 a 지우기

 

- PriorityQueue 우선순위 큐

우선순위 큐에 있는 원소들은 최솟값만 보장될 뿐 나머지 원소들이 순서대로 정렬되지는 않을 수 있다!

PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(1); // pq.offer(1);과 동일
pq.poll(); // 최솟값 제거

 

높은 수가 우선이 되게 할 때는 아래와 같이 사용 

 // Collections.reverseOrder() 써서 높은 수가 우선이 되게
 PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());

 

- 가장 큰 수 / 가장 작은 수

int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;

- HashSet

중복을 허용하지 않고 순서도 없고, 정렬도 안된 상태 

 Set<Integer> hs = new HashSet<>();
 hs.add(1); // 값 추가
 
 // HashSet을 오름차순 정렬된 배열로 변환시 
 hs.stream().sorted().mapToInt(i -> i).toArray();

 

- HashMap

HashMap<Integer, String> hm = new HashMap<>();
hm.put(1, "안녕"); // 값 삽입
hm.get(1); // "안녕" 출력
hm.values(); // 키의 값 출력 
hm.containsKey(1); // true
hm.containsValue("안녕"); // true

// 처음 나오는 크기면 1로 초기화, 기존에 있던 크기면 값 증가
hm.put(arr[i], hm.getOrDefault(arr[i], 0) + 1);
// arr[i]가 hm에 없으면 0반환, 있으면 키의 값 반환
hm.getOrDefault(arr[i],0);

// 모든 hm1의 키를 순회
HashMap<String, Integer> hm1 = new HashMap<>();
for(String key : hm1.keySet()) {
    ...
}

 

- TreeMap

키값이 알파벳순(오름차순)으로 정렬된 상태로 출력

TreeMap<String, Integer> tm = new TreeMap<>();

 

- getOrDefault()

// getOrDefault 메소드 이용해 name이 한번 더 나오면 +1 아니면 기본값 0 삽입
tm.put(name, tm.getOrDefault(name, 0)+1);

 

 

- Entry

 키, 값 둘 다 출력 필요할 때는 Entry 사용

        for(Map.Entry<String, Integer> entry : tm.entrySet()) {
            String s = entry.getKey();
            int num = entry.getValue();
        }

- 문자가 숫자인지 확인하는 함수

Character.isDigit('a'); // false
Character.isDigit('1'); // true

 

 

반응형