문제는 공유불가라 올릴 수 없지만 새로 안 사실이 너무 많아서 신나서 쓴다 !!!
나도 어렵지 않게 풀었던 문제들이지만 더 간단하게 풀 수 있었던 사실 !!!!!
* StringBuilder 다시 보기
나는 이제껏 .append()로 값들을 이어서 빠르게 출력해줄 때만 사용했었는데 기능들이 정말 많았다.
- sb.append("*".repeat(5)); 하면 *을 5번 sb에 넣어준다 !!! 와웅
-sb.reverse(); //문자열 뒤집기
문자열이 들어왔을 때 뒤집어서 출력하는 것 같은 경우에 나는 스택에 넣어서 꺼내는 방식을 썼는데
StringBuilder를 사용하면 한 줄로도 가능했다.
String s = "apple";
StringBuilder sb = new StringBuilder(s);
return sb.reverse().toString();
이렇게도 할 수 있다는 거 첨 알고 정말 ㅜ 신문물 발견한 원시인 같이 소리냈다.
여기서 reverse()에 toString까지 !!!
또 알게된게 StringBuilder 생성할 때 괄호안에 초깃값을 넣어줄 수 있다. 그럼 sb는 애초에 s라는 문자열이 들어가있음..
그리고
int a = 10
int b = 5 일때 단순히 105로 이어서 출력하고 싶으면 이럴 때도 StringBuilder이용 !
마법같은
Integer.parseInt
나는 단순히 문자열 -> 정수로 변환해줄 때만 사용했었는데
10진수 문자열 s를 2진수 int형으로 바꿀 때
- Integer.parseInt(s, 2); 해주면 걍 끝남.......
16진수 문자열 s를 2진수 문자로 변환해줄 때는
1. int num = Integer.parseInt(s, 16); // 16진수 문자열을 16진수 int형태로 변환
2. Integer.toBinaryString(num); //16진수 int형을 2진수 문자열로 변환 !!!!
알수록 신기한 Stream
- 스트림으로 최소값 뽑아내기
1. int arrResult[] = Arrays.stream(arr).sorted().toArray();
이러면 arrResult[0] 이 최소값이고
2. int answer = Arrays.stream(arr).min().getAsInt();
이렇게하면 arr배열 안에서 최소값을 answer에 저장 !
- 여러 요소들을 xor해서 10진수 출력할 때
Arrays.stream(arr).mapToInt(s -> Integer.parseInt(s,2).reduce((x,y) -> x ^ y).getAsInt();
1. 배열을 스트림만들고
2. s문자열을 2진수 정수로 반환
3. 연쇄연산 다음요소와 계속해서 XOR 연산
4. int형으로 변환
한 줄로 끝낼 수 있다 .. !!!!!
- stream().boxed()
stream에는 객체와 클래스 타입만 들어갈 수 있는데 boxed()메소드는 원시타입들을 클래스 타입으로 바꿔줘서 스트림에 담길 수 있게한다.
int[] A
Arrays.stream(A).boxed().sorted((x,y) -> y - x); 정렬한 거
근데 하나도 정렬이 안 됐다 뭐지 ?
A = Arrays.stream(A).sorted().toArray(); 하면 정렬된게 저장되긴 함..
Character 메소드
- isDigit(c) : 해당 문자가 숫자인지 판별
String 메소드
코딩테스트 이후에 알게되었는데 복습하다가 이거 이용하는 문제가 나와서 다시한 번 써본다.
- String.join(구분자, 배열/리스트) : 배열/리스트의 값을 구분자로 구분하여 뽑아줌.
1. 이렇게 하면 String배열에 담긴 문자열들을 반복문 돌리지 않아도 공백없이 하나의 문자열로 이어줄 수도 있고
2. 문자열들을 ,로 구분해서 하나의 문자열로 만들어 줄 수도 있다 !
정규표현식
알고리즘 풀 때 슬쩍슬쩍 필요해서 그때마다 찾아쓰긴 했는데 귀찮아서 확실히 짚고 넘어가진 않았다.
그런데 더는 미룰 수 없을 것 같다. 언제까지 하나씩 찢어서 숫자인지 영문자인지 기호인지 비교할 건가
- s.replaceFirst("^0*","");
이라는 코드가 있었는데 ^의 의미는 시작 *는 없을 수도 있고 많을 도 있다는 말
따라서 이 문자열에서 0으로 시작하는 첫 번째 요소를 빈칸으로 == 없애버린다는 의미.
뭐가많긴한데 기본적인 거 외에는 그때그때 필요한 거 익히면 될 것 같다.
^[0-9]*$ | 숫자만 |
^[a-zA-Z]*$ | 알파벳만 |
^[가-힣]*$ | 한글만 |
^[a-zA-Z0-9]*$ | 알파벳이나 숫자만 |
^[a-zA-z0-9]+@[a-zA-Z0-9]+\\.[a-z]+$ | 이메일 |
\w+@\w+\.\w+(\\.\\w+)? | 이메일(\ <<= 확장문자) |
^01(?:0|1|[6-9])-(?:\\d{3}|\\d{3})-\\d{4}$ | 핸드폰번호 |
^ | 시작 |
[] | 괄호 안 의 형식이 일치되어야한다. |
- | ex) 0,1,2,3,4,5,6,7,8,9 => 0-9 |
* | 없을수도 많을수도 있다. ex) [0-9]* => 1237999 0,4,6,8 처럼 없을 수도 9 처럼 여러개있을 수도. |
$ | 끝 |
. | 정해지지 않았으나 문자 하나만 허용 |
? | 앞 문자가 없거나 하나 있음 |
[^] | 괄호 속 맨 앞에 ^가 있으면 not을 뜻함. ex) !=에서 !와 같은 역할이라 보면 됨 |
{n} | 횟수나 범위를 뜻함 |
{n.} | 최소한 n개 |
() | 소괄호 안에는 하나의 문자로 인식(그룹핑) |
| | 패턴 안에서 or연산 |
\s | 공백문자 |
\S | 공백문자가 아닌 나머지 문자 |
\w | 알파벳이나 숫자, 언더바를 찾음 |
\W | 알파벳이나 숫자,언더바를 제외한 문자. |
\d | [0-9]와 동일 |
\D | 숫자를 제외한 모든 숫자 |
원래 내가 알고있던 세상이 무너지는게 싫어서 복습을 싫어했는데 저번 미니과제부터 알아가는게 정말 많아서 !!
푸는 법이 꼭 아니어도 세세한 내가 몰랐던 메소드 같은 거 알아갈 수 있어서 너무 재밌고 좋다 !!!! 😆😆😆
순식간에 1-1부터 1-5까지 25문제 리팩토링 했다 .. 물론 한 다섯시간 걸리긴 했음 ㅋ
'ZB 백엔드 스쿨 > 주차별 정리' 카테고리의 다른 글
Pre 코딩테스트 2회차 회고 (2-1~2-5) (0) | 2023.08.08 |
---|---|
제로베이스 백엔드 부트캠프 2주차 정리 - Chapter02. 선형자료구조 (0) | 2023.07.21 |
제로베이스 백엔드 부트캠프 2주차 정리 - Chapter01. 기초수학 (1) | 2023.07.19 |
제로베이스 백엔드 부트캠프 1주차 정리 (0) | 2023.07.09 |