자바로 코테 준비하기😈 - 기본 코드, 문자열, 해시

mingsso·2023년 9월 28일
0

Algorithm

목록 보기
16/35

참고 링크
https://velog.io/@hygge/Java-코딩테스트-문법-속성-정리
https://velog.io/@kjyeon1101/코테-Java-코테-벼락치기


1️⃣ 기본 코드

맨 위에 import java.util.*; 꼭 붙이기

연산자 & 자료형

  • &&: And / ||: Or
// int -> String
String.valueOf(number);

// String -> int
int number = Integer.parseInt(str);



입출력

숫자 입력받기

Scanner in = new Scanner(System.in);
// 공백으로 구분된 숫자 2개 입력 받기 
int n = in.nextInt();
int x = in.nextInt();

// 공백으로 구분된 숫자 배열로 입력 받기
for (int i = 0; i < n; i++) {
	int num = in.nextInt();
    arr.add(num);
}


문자열 입력받기

// 공백으로 구분된 문자열 각각의 변수에 저장하기 
for (int i = 0; i < t; i++) {
    String a = in.next();
    String b = in.next();
}



배열

사이즈는 초기화 시 고정되며 변경이 불가능함

  • 배열이랑 ArrayList 둘 다 -1 인덱스가 안되넹
int[] nums = new int[5];
int[] nums = new int[] {1, 2, 3, 4, 5};

int[] temp = Arrays.copyOfRange(nums, start, end); // 배열 복사하기

// 배열의 원소 for문으로 접근하기 
for (int i = 0; i < nums.length; i++)
	set.add(nums[i]);
    
for (int num : nums) 
	set.add(num);
    

// ArrayList를 배열로 변환하기
int[] answer = nums.stream().mapToInt(i -> i).toArray();
⭐️Arrays.sort(nums);  // 배열 정렬하기
Arrays.sort(nums, Collections.reverseOrder()); // 역순 정렬

// 이차원 배열의 첫 번째 원소가 같으면 두 번째 원소끼리 비교
Arrays.sort(nums, (e1, e2) -> {
	if (e1[0] == e2[0]) 
    	return e1[1] - e2[1];
    else
    	return e1[0] - e2[0];
});



ArrayList 관련 메소드

사이즈가 가변적, 사이즈에 상관없이 데이터 추가/삭제 가능

List<String> list = new ArrayList<>();

list.add("서울") // list의 가장 뒤에 서울 삽입
list.addAll(list2) // list의 뒤에 list2의 모든 값 삽입

⭐️list.get(0) // 0 위치의 값 반환 (서울)
list.set(0, "대구") // 0 위치의 값을 대구로 변경

list.indexOf("대구") // 대구의 첫번째 인덱스 반환
list.lastIndexOf("대구") // 대구의 마지막 인덱스 반환

list.remove(0) // 0 위치의 값 삭제
list.remove("대구") // 첫번째 대구 삭제
list.removeAll(list2) // list에서 list2에 들어있는 모든 값을 삭제
list.retainAll(list2) // list에서 list2에 들어있는 값을 제외한 모든 값을 삭제

list.clear() // 전체 값 삭제
list.isEmpty() // 길이가 0이면 true, 아니면 false
list.size() // 길이

list.contains("서울") // 서울이 list에 있으면 true, 없으면 false
list.containsAll(list2) // list에 list2의 모든 값이 포함되어 있으면 true

list.removeIf(k -> k % 2 != 0) // 람다식으로 홀수를 list에서 모두 제거
// ArrayList 정렬하기 
list.sort(Comparator.naturalOrder());  // 오름차순 
list.sort(Comparator.reverseOrder());  // 내림차순 



Math

  • round(): 실수의 소수점 첫번째 자리를 반올림하여 정수로 리턴
  • ceil(): 올림 / floor(): 내림
int num = (int) Math.ceil((double)(100 - progresses[i]) / speeds[i]));



2️⃣ 문자열 String

String 관련 메소드

한 번 만들어지면 문자를 추가하거나 삭제할 수 없는 변경 불가한 타입

String str = "abcde";

str.split(" ") // 띄어쓰기로 구분된 문자열 str을 분리해서 String[] 배열 반환
str.split("") // 띄어쓰기 없는 문자열 str을 한 문자씩 분리해서 String[] 배열 반환

Integer.toString(arr.get(i))  // int to String

str.length() // str의 길이 반환
str.isEmpty() // str의 길이가 0이면 true, 아니면 false

str.charAt(2) // 인덱스로 문자 찾기, c 반환
str.indexOf("c") // 문자로 첫번째 인덱스 찾기, 2 반환
str.lastIndexOf("c") // 문자의 마지막 인덱스 찾기, 2 반환


// String 원소 for문으로 접근하기
for (int i = 0; i < s.length(); i++) {
	System.out.println(s.charAt(i));
}

str.substring(2, 4) // 2~3 위치의 문자열 "cd" 반환
str.substring(3) // 3부터 끝까지의 문자열 "de" 반환
str1.startsWith(str2)  // str1의 접두어가 str2인지 확인

str.replace('b', 'k') // b를 k로 변경 (akcde)

str.equals("abcde") // str과 abcde를 비교해서 같으면 true (꼭 큰따옴표 사용하기)
str.contains("bc") // str에 bc가 포함되어 있으면 true, 아니면 false

str.trim() // str의 앞뒤 공백 제거, 문자열 사이 공백은 제거 X

str.toLowerCase() // 대문자를 모두 소문자로 변경
str.toUpperCase() // 소문자를 모두 대문자로 변경

str.compareTo("abcdd")
/*
str과 abcdd가 같으면 0
str이 abcdd보다 사전순으로 앞이면 -1
str이 abcdd보다 사전순으로 뒤면 1
str과 abcdd가 마지막 문자만 다르면 마지막 문자의 사전순 차이 반환 (여기선 1)
*/



StringBuilder 관련 메소드

변경 가능한 타입

StringBuilder sb = new StringBuilder();

sb.charAt(2) // 인덱스로 문자 찾기

sb.append("abc"); // 문자열 추가
sb.insert(2, "kk") // 2 위치에 kk 삽입 (→ abkkc)

sb.delete(0, 2) // 0~1 위치의 문자열 삭제 (→ c)
sb.deleteCharAt(2) // 2 위치의 문자 삭제 (→ ac)

sb.setCharAt(0, 'h') // 0 위치의 문자를 h로 변경 (→ hbc)

sb.reverse() // 문자열 거꾸로 뒤집기 (→ cba)

sb.setLength(2) // 문자열 길이를 2로 줄임 (→ ab)
sb.setLength(4) // 문자열 길이를 4로 늘림 (→ 뒤가 공백으로 채워짐)

sb.toString();  // String으로 변환



3️⃣ 해시 HashMap

  • HashMap: <key, value>쌍, 특정 규칙 없이 출력됨
  • LinkedHashMap: <key, value>쌍, 키 값이 입력순으로 정렬되어 출력됨
  • TreeMap: <key, value>쌍, 키값이 오름차순으로 정렬된 상태로 출력됨
HashMap<Integer, String> map = new HashMap<>();
HashMap<String, String> map = new HashMap<>();

map.put(1, "사과")
map.put(2, "바나나")
map.put(1, "포도") // key 1이 이미 존재하면 key 1의 value가 "포도"로 대체

// Map에 배열 넣기
Map<String, String[]> arrMap = new HashMap<>();
arrMap.put("key01", valueArr[0]);
arrMap.put("key02", valueArr[1]);
arrMap.put("key03", valueArr[2]);

map.remove(1) // key 값으로만 요소 삭제 가능
map.clear() // 전체 삭제

⭐️map.containsKey(1) // key 값 중 1이 있으면 true, 없으면 false
map.containsValue("사과") // value 중 "사과"가 있으면 true, 없으면 false

/* 값 출력 */
// 방법 1
for (Integer i: map.keySet())
	System.out.println(i + map.get(i)); // 1 사과

// 방법 2: key와 value가 모두 필요할 때 주로 사용
for (Map.Entry<Integer, String> entry: map.entrySet())
	System.out.println(entry.getKey() + entry.getValue()); // 1 사과



4️⃣ 해시 HashSet

  • HashSet: 중복을 허용하지 않는 구조, 순서가 없고 정렬도 안 함
  • LinkedHashSet: 중복을 허용하지 않는 구조, 삽입된 순서대로 순서를 관리함
  • TreeSet: 중복을 허용하지 않는 구조, 이진탐색트리 형태로 데이터를 저장하므로 정렬함
HashSet<Integer> set = new HashSet<>();

set.add(1) // 값 추가
set.remove(1) // 값이 1인 데이터 삭제
set.removeAll(set2) // set의 데이터 중 set2에 들어있는 데이터를 모두 삭제
set.retainAll(set2) // set의 데이터 중 set2에 들어있지 않은 데이터를 모두 삭제
set.clear() // 모든 데이터 삭제
set.size() // 크기 반환
set.contains(1) // 값 1이 있으면 true, 없으면 false

/* 값 출력 */
// 방법 1: get 메소드가 없으므로 원소에 접근하려면 이터레이터 사용
Iterator iter = set.iterator();
while (iter.hasNext())
	System.out.println(iter.next());

// 방법 2: for-each문으로 원소에 접근
for (String item: set)
	System.out.println(item);
profile
🐥👩‍💻💰

0개의 댓글