일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 다시보기
- 시뮬레이션
- 정렬
- BOJ
- 삼성SW역량테스트
- 백준
- 추석트래픽
- 프로그래머스
- 코딩테스트
- level2
- 마곡속눈썹펌
- 포스코
- ai/bigdata
- Java
- 직무면접
- OS
- 삼성 SW역량테스트 기출
- leetcode
- 등촌동속눈썹펌
- 수학
- 투포인터
- 운영체제
- 딥러닝
- 리트코드
- 삼성
- 마곡속눈썹연장
- 알고리즘
- 등촌동속눈썹연장
- 카카오
- 1차면접
- Today
- Total
기록하는 습관을 들이자
알고리즘 구현 시 자주 등장하는 유형(개념) - JAVA 본문
----
업데이트 중!
자주 까먹는 메소드
ArrayList, LinkedList의 .indexOf(Integer, String형 등) - 해당 element의 index 반환, 없으면 -1
ArrayList, LinkedList의 .addAll(List 형) - 해당 리스트에 parameter로 주어지는 리스트의 요소를 모두 추가
StringBuilder의 .setCharAt(index, char형) - 해당 index에 문자를 해당 요소로 바꿈
TreeMap의 .ceilingKey(int 형 등 숫자) - 인자 값으로 넘어온 숫자보다 큰 key 값들 중에 가장 작은 key 값 반환
Math 클래스의 .round(double 형 숫자) - 인자 값으로 넘어온 실수를 소수점 아래 첫째자리에서 반올림
문자열 parsing 구현 시
String 클래스의 .split() 메소드나 StringTokenizer 클래스를 이용하면된다.
1. .split(String delim) : 구분자를 문자열 형태로 넣어주면된다.
다만, 구분자 조건을 여러 개 주고 싶을 때는 | 로 구분해서 넣어주면 된다.
ex> "1&6*3#2" -> .split("&|*|#")
(단, 구분자 조건 중에 개행 문자의 경우에는 앞에 \\를 추가해서 넣어주어야 에러가 나지 않는다.) ('+', '*'의 경우는 \\+, \\*으로 나타내기)
2. .split(String delim, -1) : 뒷 부분 문자열이 빈 문자열일 경우에도 그대로 파싱해해서 결과값을 리턴해준다.
ex> String str = "1::";String [] arr = str.split(":", -1); -> 1, "", ""이 리턴된다.-1을 파라미터로 주지 않으면 arr 배열의 길이는 1이 된다!
2. StringTokenizer 클래스 (java.util 패키지)
StringTokenizer st = new StringTokenizer(String str, String delim, boolean returnDelims);
str: 자르고자하는 문자열
delim: 구분자
returnDelims: 리턴 결과에 구분자도 포함할지 여부
메소드 정리
.countTokens() : 토큰 수 반환
.nextToken() : 다음 토큰
.hasMoreTokens() : 리턴할 다음 토큰이 있으면 true, 없으면 false 반환
시뮬레이션 구현 시
특정 점에서 막힐 때까지 이동하기
int nextX = i; //시작 위치
while(true){
if(nextX + 1 >= A.length || A[nextX + 1][j] != 0) break;
nextX++;
}
배열에서 오른쪽에 있는 수 중에서 가장 가까운 큰 수 or 작은 수 구하기
2 | 1 | 4 | 3 | 6 |
ex> 2의 오큰수 구하기 => 4
스택 이용!
Stack<Integer> st = new Stack<Integer>();
for(int i=0;i<A.length;i++){
if(i == 0){
st.push(A[i]);
continue;
}
if(st.peek() < A[i]){
while(st.peek() < A[i]){
st.pop();
}
st.push(A[i]);
}else{
st.push(A[i]);
}
}
가장 긴 연속된 수의 길이 구하기
int cnt = 1;
int max = Integer.MIN_VALUE;
for(int i=1;i<N;i++){
if(A[i] == A[i-1]){
cnt++;
}else{
if(max < cnt)
max = cnt;
cnt = 1;
}
}
연속된 값의 이동 like 큐빙 주사위, 미세먼지 안녕
다음과 같이 배열에서 값을 한 칸씩 다음과 같은 방향으로 이동시켜야 한 다면 양 끝 모서리에 해당하는 값들을 미리 저장해 둔 후,
한 줄 씩
for (int i = 0; i < C - 1; i++) {
A[0][i] = A[0][i + 1];
}
칸을 이동시켜주면 된다!
'알고리즘 > Java' 카테고리의 다른 글
[알고리즘] 투 포인터(Two-Pointer Algorithm) 알고리즘 (0) | 2020.05.06 |
---|---|
BigDecimal 클래스 - 오차 없는 부동 소수점 연산을 위한 클래스 (0) | 2020.04.15 |
Java HashMap 클래스와 메소드 (0) | 2020.04.06 |
Java 정렬(Sorting) (0) | 2020.04.05 |
Java Set (Set 인터페이스, HashSet, TreeSet, LinkedHashSet) (0) | 2020.04.05 |