-
Notifications
You must be signed in to change notification settings - Fork 0
/
Algorithm_Java.txt
124 lines (115 loc) · 6.85 KB
/
Algorithm_Java.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
=====================================================================================================================================================================
자료형 변환하기
-------------------------------------------------------------------------------------------------------------------
List<String> list1 (int는 안됨,형 일치해야함)
//toArray
String[] array = list1.toArray(new String[0]); //(String[]::new)도 가능
-------------------------------------------------------------------------------------------------------------------
//List로 변환
List<String> list2 = Arrays.asList(array);
-------------------------------------------------------------------------------------------------------------------
//ArrayList로 변환
ArrayList<String> list2 = new ArrayList<>(Arrays.asList(array));
-------------------------------------------------------------------------------------------------------------------
StringBuilder sb
문자열을 append, insert, delete, reverse() 가능
어떤 형태든 sb.append()로 추가가능
->String : sb.toString()
-------------------------------------------------------------------------------------------------------------------
int n
->String : String.valueOf(n) //람다 : .map(String::valueOf)
-------------------------------------------------------------------------------------------------------------------
String sn
->int : Integer.parseInt(sn);
->long : Long.parseLong(sn);
->char[] : sn.toCharArray()
-------------------------------------------------------------------------------------------------------------------
char c
->int : Character.getNumericValue(c)
->String : String.valueOf(c)
-------------------------------------------------------------------------------------------------------------------
stream
//문자열→ 스트림 String s s.chars()
//리스트→ 스트림 List<Integer> list list.stream()
//배열→ 스트림 char[], int[] array Arrays.stream(array)
-------------------------------------------------------------------------------------------------------------------
.boxed() 기본형을 래퍼클래스로
int[] intArray 와 같은 배열은 Arrays.stream(intArray) 와 같은 방식으로 스트림 변환
List<Integer> intList 처럼 리스트는 그대로 intList.stream() 할 수 있음
=====================================================================================================================================================================
입출력
-------------------------------------------------------------------------------------------------------------------
입력 (scanf)
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine(); // 문자열 입력
int i = Integer.parseInt(bf.readLine()); // 정수 입력
}
-------------------------------------------------------------------------------------------------------------------
출력 (print)BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //할당된 버퍼에 값 넣어주기
String s = "abcdefg"; //출력할 문자열
bw.write(s+"\n"); //버퍼에 있는 값 전부 출력
bw.flush(); //남아있는 데이터를 모두 출력시킴
bw.close(); //스트림을 닫음
=====================================================================================================================================================================
문자열 공백기준 분리
1.1.1.1.1.1.1.
StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt(st.nextToken()); //첫번째 호출
int b = Integer.parseInt(st.nextToken()); //두번째 호출
1.1.1.1.1.1.2.
String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음
====================================================================================================================================================================
정렬하기
-------------------------------------------------------------------------------------------------------------------
Map 값 기준 내림차순 정렬 1
List<Character> keySet = new ArrayList<>(alphabetMap.keySet());
keySet.sort(new Comparator<Character>() {
@Override
public int compare(Character o1, Character o2) {
return alphabetMap.get(o2).compareTo(alphabetMap.get(o1)); // 내림차순
}
});
-------------------------------------------------------------------------------------------------------------------
Map 값 기준 내림차순 정렬 2
List<Map.Entry<Character, Integer>> entryList = new ArrayList<>(alphabetMap.entrySet());
entryList.sort(Map.Entry.comparingByValue(Comparator.reverseOrder()));
-------------------------------------------------------------------------------------------------------------------
Map value에 값 더할때
map.put(c, map.getOrDefault(c, 0) + weight);
//map에 해당 key 있으면 채워주고 없으면 만들어줌
//map.get은 없으면 못함, getOrDefault(c, 0) 사용
====================================================================================================================================================================
슬라이딩 윈도우기법
//end의 값 하나씩 올리고 start의 값 내릴 수 있는 만큼 계속 내림
while (end < n) {
sum += nList[end++];
while (sum >= s) {
min = Math.min(min, end - start);
sum -= nList[start++];
}
}
====================================================================================================================================================================
num 보다 작은 소수 구하기 (에라토스테네스의 체 알고리즘)
-------------------------------------------------------------------------------------------------------------------
// 소수로 표기되어있다면 해당 단위에서 기존에 탐색한 i까지는 이미 탐색을 완료했던 것임
// 따라서 i*i + 1, 2,....와 같이 탐색하지 않은 값들부터 탐색을 시작함
//ex) i==6 -> 6*6 , 6*7 , 6*8 ...
for (int i = 2; i * i <= num; i++) {
if (isPrime[i]) {
for (int multiple = i * i; multiple <= num; multiple += i) {
isPrime[multiple] = false;
}
}
}
-------------------------------------------------------------------------------------------------------------------
최장증가부분수열
int[] dp = new int[n];
Arrays.fill(dp,1);
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
//이전 노드중 자신보다 작은 dp값 중 가장 큰 값
if(list2[i]>list2[j]) dp[i]=Math.max(dp[i],dp[j]+1);
}
System.out.println(dp[i]);
}