개발자의 알고리즘과 자료구조에대해 정확히 알고있는지 확인하고 그 문제해결 능력을 확인하기위해 채용과정에서 사용되는 시험방법
평가요소



풀이 1: 시간 복잡도를 고려하지 않은 완전 탐색 (Brute Force)
import java.util.*;
public class TwoSumBruteForce {
public static int[] findPair(int[] nums, int target) {
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
return new int[]{nums[i], nums[j]};
}
}
}
return new int[]{}; // No pair found
}
public static void main(String[] args) {
int[] nums = {1, 3, 2, 7, 5, 4};
int target = 9;
int[] result = findPair(nums, target);
System.out.println(Arrays.toString(result));
}
}
외부루프(i): O(N)
내부루프(j): O(N)
총 시간 복잡도: O(N²)
문제점
→ HashMap을 사용해 시간복잡도를 최소화 한다.
import java.util.*;
public class TwoSumOptimized {
public static int[] findPair(int[] nums, int target) {
Map<Integer, Integer> seen = new HashMap<>();// hashMap을 이용하여 현재숫자 저장
//<현재까지 탐색한 숫자, 해당 숫자가 존재한다는 표시>
for (int num : nums) { //배열 nums의 첫 번째 원소부터 마지막 원소까지를 순서대로 탐색
int complement = target - num; //목표값에서 현재숫자를 뺌 ex) 9-1=8
if (seen.containsKey(complement)) { //seen에 complement가 존재하는지 확인
return new int[]{complement, num}; //존재 하면 새로운 int 배열에 반환!
}
seen.put(num, 1); //해당 숫자(num)가 존재
}
return new int[]{}; // 조건을 만족하는 쌍이 없을 때 빈 배열 반환
}
public static void main(String[] args) {
int[] nums = {1, 3, 2, 7, 5, 4};
int target = 9;
int[] result = findPair(nums, target);
System.out.println(Arrays.toString(result));
}
}

단일루프: O(N)
Hash Map 조회와 삽입: O(1)
총 시간 복잡도: O(N)


import java.util.*;
import java.io.*;
String[] arr1 = new String[5];
int[] arr2 = {1,2,3};
int N=3
int[] arr3 = new int[N];
int arr[]= {10,8,11,2,3,0}
//오름차순 {0,2,3,8,10,11}
Arrays.sort(arr1);
//내림차순
Arrays.sort(arr1, Collections.reverseOrder());
//일부만 정렬 {2,8,10,11,3,0}
Arrays.sort(arr1,0,4);
// 4. 오름차순 정렬하면 binary search로 특정 값을 찾을 수 있다.
Arrays.binarySearch(arr1, 2);
// 5. 배열을 어레이리스트로 변환!
List list = Arrays.asList(arr1);
// 6. 배열의 특정 범위 자르기
int tmp[] = Arrays.copyOfRange(arr1, 0, 3);
// 1. length
int[] arr = new arr[3];
System.out.println(arr.length);
// 2. length()
String str = "java";
System.out.println(str.length());
// 3. size()
ArrayList<Integer> list = new ArrayList<>();
System.out.println(list.size());
String str = "hello world";
//길이 반환
str.length();
//빈문자열 체크
str.isEmpty();
//문자 찾기
str.charAt(0); // 'h' -> 문자 반환
str.indexOf("e"); //1 -> 인덱스 반환
str.lastIndexOf("r"); // 8->마지막으로 문자가 속한 인덱스 반환
// 문자 자르기
str.substring(0, 5); //인덱스 0 이상 5미만 위치의 문자열 반환
str.substring(3); //인덱스 3 이상 위치의 문자열 반환
for(int i = 0; i < str.length(); i++) str.charAt(i);
//문자 치환(바꾸기)
//replace([기존문자],[바꿀문자])
str.replace('e','o'); // 모든 [기존문자]를 [바꿀문자]로 치환
//문자 반복
str.repeat(k) //k번 반복
//문자 포함 여부 판단
str.contains("hell");
//문자열을 배열로 만들고 싶을 때
String str = "12345";
String[] Arr = str.split("");
char[] cRsp = str.toCharArray();
// 대소문자 변경
str = str.toUpperCase(); // HELLO WORLD
str = str.toLowerCase(); // hello world
StringBuilder sb = new StringBuilder();
sb.append("A"); //문자열 추가하기
sb.insert(1,"B"); //중간에 문자열 삽입하기
sb.delete(0,1); //문자열 삭제하기(~부터 ~까지)
sb.reverse(); // 문자열 뒤집기
sb.toString(); // 문자열 변환
String str = sb.append("A").append("B").append("C").append("D")
.insert(4,"Java").delete(4,8).reverse().toString(); //메소드 체이닝
HashMap<String,Integer> = new HashMap<>();// HashMap 선언
// key-value 넣기
hm.put("java",0);
//key로 값 가져오기
hm.get("java");
//containsKey()로 존재유무 확인
if(!hm.containsKey("java")){
hm.put("java",1)
}
// keySet() 함수로 맵 순회
for(String key : hm.KeySet()) {
hm.get(key);
}
// 선언
ArrayList<String> list = new ArrayList<>();
// 삽입
list.add("java"); // {"java"}
list.add(0, "python"); // {"python", "java"} (0번째 인덱스에 삽입)
// 수정
list.set(1, "kotlin"); // {"python", "kotlin"}
// 삭제
list.remove(1); // {"python"}
// 가져오기
list.get(1);
// 값 존재 유무 확인
list.contains("java"); // false
list.indexOf("python"); // 0 존재하면 인덱스 리턴
// 리스트 길이
list.size();
//리스트에 다른 리스트 요소가 전부 포함되어 있는지 여부 체크
list.containsAll(list2);
//문자열 타입 배열을 list로 변환
String[] temp = {"apple","banana","lemon"};
List<String> list = new ArrayList<>(Arrays.asList(temp));
//list를 문자열 배열로 변환
List<String> list = new ArrayList<>();
String[] temp = list.toArray(new String[list.size()]);
int[] temp = {1,2,3,10,20};
List<Integer> list = new ArrayList<>(Arrays.asList(arr));
//정수형 list 원소 중 최대, 최소값
Collections.max(list);
COllections.min(list);
//List 정렬
Collections.sort(list); //오름차순(ASC)
Collections.sort(list, Collections.reverseOrder()); //내림차순 (DESC)
//List 뒤집기
Collections.reverse(list);
// 1. 최대 최소
Math.max(10, 2);
Math.min(10, 2);
// 2. 절대값
Math.abs();
// 3. 올림 내림 반올림
Math.ceil(-3.2); // -3
Math.floor(-3.2); // -4
Math.round(-3.26); // -3 첫째자리에서 반올림
// 3-1. 소수 둘째, 셋째 자리에서 반올림 하고 싶다면
double a = 1.23456;
String b = String.format("%.1f", a); // .1f는 둘째자리에서 반올림
// 4. 제곱 제곱근
Math.pow(2, 2); // 2^2 = 4
Math.sqrt(4); // 2
🌳🌲🌴🌳🌲🌴