1. 자료구조
1) 스택
•
Stack<Integer> stack = new Stack<>(); : 선언
•
push(): top에 삽입
•
pop(): top을 삭제&확인
•
peek(): top을 확인
2) 큐
•
Queue<Integer> queue = new LinkedList<Integer>(); : 선언
•
add(): rear에 삽입
•
poll(): front를 삭제&확인
•
peek(): front를 확인
3) 우선순위 큐
•
PriorityQueue<Integer> pq = new PriorityQueue<>(); : 선언
•
add() : rear에 삽입
•
remove() : front를 삭제&확인
2. 자료형
1) StringBuffer
StringBuffer bf = new StringBuffer();
bf.append("fds");
System.out.println(bf.toString());
Java
복사
String str = "abcde";
// reverse
StringBuffer sb = new StringBuffer(str);
String reversedStr = sb.reverse().toString();
YAML
복사
2) String
•
s.length()
•
string.charAt(), indexOf(), lastIndexOf(), length()
•
str1.equals(str2)
•
String s = “010-5360-4256”; String[] s = str.split(”-”);
•
String s = s.repeat(10);
•
for(char c : skip.toCharArray())
•
str.toUpperCase();
◦
Character.toUpperCase(’t);
•
str.trim(); // 공백 제거
String str = new StringBuffer(String.valueOf(12345)).reverse().toString();
return Stream.of(str.split("")).mapToInt(Integer::parseInt).toArray(); -> [5,4,3,2,1]
Java
복사
3) Array
•
a.length
int[] arr = { 1, 2, 3, 4, 5 };
System.out.println(Arrays.toString(arr)); // 출력
Arrays.sort(arr); // 정렬
Arrays.copyOf(num_list, 5); // 5까지 복사
Arrays.fill(arr, -1); // -1로 전부 초기화
int[] arr1 = Arrays.copyOfRange(arr, 0, 3); // 슬라이스 -> 1,2,3
int[] arr2 = arr.clone();
Java
복사
•
2차원 배열의 열 기준으로 오름차순 정렬
int[][] arr = new int[n][2];
Arrays.sort(arr, new Comparator<int[]>() {
public int compare(int[] s1, int[] s2) {
if (s1[0] == s2[0]) {
return s1[1] - s2[1];
} else {
return s1[0] - s2[0];
}
}
}
Arrays.sort(arr, (s1, s2) -> {
if (s1[0] == s2[0]) {
return s1[1] - s2[1];
} else {
return s1[0] - s2[0];
}
});
Java
복사
compare 메소드는 두 객체를 비교하고, 첫 번째 객체가 두 번째 객체보다 "작을 때" 음수를, "같을 때"는 0을, "클 때"는 양수를 반환해야 함
인자가 a, b일 때 a-b로 두면 a가 더 작을 때 음수가 되고 a를 앞에 두게 되어 오름차순 정렬이 되고,
b-a로 두면 a가 더 클 때 음수가 되고 a를 앞에 두게 되어 내림차순 정렬이 된다.
•
array stream
◦
도입 전
int i=0;
Form[] formList = new Form[infoList.length];
for(String info: infoList) {
formList[i++] = Form.createInfoForm(info);
}
Java
복사
◦
도입 후
Form[] formList = Arrays.stream(infoList)
.map(Form::createInfoForm)
.toArray(Form[]::new);
Java
복사
4) ArrayList
•
al.size()
ArrayList<Integer>[] A = new ArrayList[N+1]; // ArrayList형 배열 선언
// 초기화
for(int i=1; i<=N; i++) {
A[i] = new ArrayList<Integer>();
}
ArrayList<Integer> B = new ArrayList<Integer>(); // ArrayList 선언 및 초기화
A[S].add(E); // 값 추가
B.add(E)
// 정렬
for(int i=1; i<=N; i++) {
Collections.sort(A[i]);
}
Collections.sort(B);
// ArrayList 값들 조회
for(int i: B) { ... }
// 값 찾기
A.indexOf(3);
Java
복사
5) HashSet
HashSet<String> set = new HashSet<String>();
set.add("a");
String[] strArr = ...;
Set<String> set = new HashSet<>(Arrays.asList(strArr));
Java
복사
String[] a = { "apple", "banana", "xylophone" };
String[] b = { "banana", "carrot", "dog", "xray", "xylophone" };
Set<String> setA = new HashSet<>(Arrays.asList(a));
Set<String> setB = new HashSet<>(Arrays.asList(b));
ArraySet arraySet = new ArraySet();
arraySet.retainAll(setA, setB);
Java
복사
6) HashMap
HashMap<Integer,String> map = new HashMap<Integer,String>();
map.put(1,"b");
Java
복사
map.forEach((key, value) -> {
System.out.println(key + " : " + value);
});
Java
복사
String getName = (String) hashMap.get("name"); // key to value
Java
복사
7) LinkedList
String[] players = {"안녕","나야"};
LinkedList<String> list = new LinkedList<String>(Arrays.asList(players));
list.addFirst(1);//가장 앞에 데이터 추가
list.addLast(2);//가장 뒤에 데이터 추가
list.add(3);//데이터 추가
list.add(1, 10);//index 1에 데이터 10 추가
for(Integer i : list) { //for문을 통한 전체출력
System.out.println(i);
}
System.out.println(list.contains(1)); //list에 1이 있는지 검색 : true
System.out.println(list.indexOf(1)); //1이 있는 index반환 없으면 -1
String[] stringArray = list.toArray(new String[0]);
Java
복사
3. 형변환
배열과 List 변환
// 문자열 배열을 List로 변환
String[] arr = "abcde";
List<String> list = new ArrayList<>(Arrays.asList(arr));
// List를 문자열 배열로 변환
List<String> list = new ArrayList<>();
String[] arr = list.toArray(new String[list.size()]);
// 정수 배열을 List로 변환
int[] fnumbers = { 1123, 1412, 23, 44, 512132 };
List<Integer> numberList = new ArrayList<>();
for (int number : numbers) {
numberList.add(number);
}
// List를 정수 배열로 변환
List<Integer> list = new ArrayList<>();
int[] arr = list.stream().mapToInt(i->i).toArray();
Java
복사
String에서 다른 자료형으로 변환하기
String sNum = "1234";
// String -> int
int i1 = Integer.parseInt(sNum);
int i2 = Integer.valueOf(sNum);
// String -> double, float, long, short (형태 전부 같음)
double d1 = Double.parseDouble(sNum);
double d2 = Double.valueOf(sNum);
// String -> char[]
char[] c1 = sNum.toCharArray();
Java
복사
다른 자료형에서 String으로 변환하기
// int, double, float, long, short, char[] -> String (형태 전부 같음)
String str = String.valueOf(i1);
// char[] => String
for(int i=0; i<c1.length; i++)
str += String.valueOf(c1[i]);
Java
복사
// char to int
int i1 = c1 - '0';
Java
복사
진법 변환
Integer.toString(25,3) // 10 -> 3
Integer.parseInt("10001",3) // 3 -> 10
YAML
복사
Reverse
4. Math
•
Math.pow(3,2)=3^2, Math.sqrt(9)=root(9)=3
•
반올림, 올림, 버림
◦
Math.round(12.345*100)/100 // 12.35
◦
Math.ceil(12.345*100)/100 // 12.35
◦
Math.floor(12.345*100)/100 // 12.34
public boolean sosu(int n) {
if(n < 2) return false;
for(int i=2; i<= (int)Math.sqrt(n); i++) {
if(n % i == 0) return false;
}
return true;
}
SQL
복사
•
Math.abs(-3.14)=3.14
5. 입출력
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(...);
bw.newLine();
...
bw.flush(); // 한 번에 출력
Java
복사
6. 날짜 시간
•
String to LocalDate
String dateString = "2022.01.03";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
LocalDate localDate = LocalDate.parse(dateString, formatter);
YAML
복사
•
덧셈뺄셈
public static void main(String args[]) {
LocalDate todayLocalDate = LocalDate.now();
System.out.println("오늘 날짜: " + todayLocalDate);
LocalDate fiveYearsAfterLocalDate = todayLocalDate.plusYears(5);
System.out.println("5년 뒤: " + fiveYearsAfterLocalDate);
LocalDate tenMonthsAfterLocalDate = todayLocalDate.plusMonths(10);
System.out.println("10개월 뒤: " + tenMonthsAfterLocalDate);
LocalDate threeWeeksAfterLocalDate = todayLocalDate.plusWeeks(3);
System.out.println("3주 뒤: " + threeWeeksAfterLocalDate);
LocalDate twentyAfterLocalDate = todayLocalDate.plusDays(20);
System.out.println("20일 뒤: " + twentyAfterLocalDate);
YAML
복사
알고리즘
•
dfs, bfs, permutation
import java.util.LinkedList;
import java.util.Queue;
public class Test {
public static void main(String[] args) {
playDfs();
playBfs();
playPerm();
}
public static void playDfs() {
int n = 4;
boolean[] visited = new boolean[n + 1];
int[][] map = {
{0, 0, 0, 0, 0},
{0, 0, 1, 1, 0}, // 노드 1이 노드 2, 3과 연결됨
{0, 1, 0, 0, 1}, // 노드 2가 노으 1, 4와 연결됨
{0, 1, 0, 0, 1},
{0, 0, 1, 1, 0}
};
dfs(1, n, visited, map); // 1번 노드에서 시작, 4개의 노드, 빈 방문기록[5], 지도[5][5]
System.out.println();
}
public static void playBfs() {
int n = 4;
boolean[] visited = new boolean[n + 1];
int[][] map = {
{0, 0, 0, 0, 0},
{0, 0, 1, 1, 0},
{0, 1, 0, 0, 1},
{0, 1, 0, 0, 1},
{0, 0, 1, 1, 0}
};
bfs(1, n, visited, map); // 1번 노드에서 시작, 4개의 노드, 빈 방문기록[5], 지도[5][5]
System.out.println();
}
public static void playPerm() {
int n = 3;
int[] input = {1, 2, 3};
int[] output = new int[n];
boolean[] visited = new boolean[n];
perm(input, output, visited, 0, n, 3); // 입력[3], 출력[3], 빈 방문기록[3], 0, nCr(n개 중 r개 고름)
System.out.println();
}
private static void dfs(int i, int n, boolean[] visited, int[][] map) {
visited[i] = true;
System.out.println(i + " ");
for (int j = 1; j < n + 1; j++) {
if (map[i][j] == 1 && !visited[j]) {
dfs(j, n, visited, map);
}
}
}
private static void bfs(int i, int n, boolean[] visited, int[][] map) {
Queue<Integer> q = new LinkedList<>();
q.add(i);
visited[i] = true;
while (!q.isEmpty()) {
int temp = q.poll();
System.out.println(temp + " ");
for (int j = 1; j < n + 1; j++) {
if (map[temp][j] == 1 && !visited[j]) {
q.offer(j);
visited[j] = true;
}
}
}
}
private static void perm(int[] input, int[] output, boolean[] visited, int depth, int n, int r) {
if (depth == r) {
for (int i = 0; i < r; i++) {
System.out.print(output[i] + " ");
}
System.out.println();
return;
}
for (int i = 0; i < n; i++) {
if (!visited[i]) {
visited[i] = true;
output[depth] = input[i];
perm(input, output, visited, depth + 1, n, r);
visited[i] = false;
}
}
}
}
Java
복사
•
TODO
2-2 자료구조 때 배운 그래프 자바로 링크드리스트로 구현과 배열로 구현 둘다 연습해보며 복습…… (완벽히 기억 나지 않아서 코테에서 낭패봤음 ㅠ)
스택/큐로 후위 연산 구현하는 것도 자바로 다시 해보기