2회차까진 수월했다 그래도 ㅎㅎ ....
이번에도 강사님의 모범답안엔 스트림을 이용한 코드가 정말 많았다 !
또 한 번 배워간다.
Stream 관련 메소드
.boxed() : 기본형 객체를 Wrapper클래스로 변환해 줌.
ex) int형 배열 arr을 내림차순으로 정렬하고 싶을 때 Arrays.sort(arr, Collections.reverseOrder()); 하면 오류남 배열 arr을 Integer형으로 선언해줘야 하는데 입력 값으로 int형 배열이 지정되어 들어오는 경우 마음대로 바꿀 수가 없음. 이럴 때 .boxed()사용
arr=Arrays.stream(arr).boxed().sorted(Collections.reverseOrder()).mapToInt(x->x).toArray();
.collect() : 최종연산 메소드로 스트림의 요소들을 여러 형태로 수집.
ex_ 배열에서 중복 값을 제외한 요소의 갯수를 알고싶으면
int cnt = Arrays.stream(arr).collect(Collectors.toSet()).size(); 로 가능.
.chars() : 문자 스트림으로 변환해 주는 메소드
* 문자열 s에서 중복을 제외한 단어의 수 구하기 (단어는 공백으로 구분)
String arr[] = s.split(" ");return Arrays.stream(arr).collect(Collectors.toSet()).size(); 이렇게 해도 되는데
return Arrays.stream(s.split(" ")).collect(Collectors.toSet()).size(); 이렇게 하면 한 줄로 가능 .. ! 대박
XOR 다시보기
XOR은 정말 엄청난 특징이 있었다.
= > 짝을 이루는 것을 없애고 짝이 안 맞는 값만 남긴다는 것 !
원래도 비트 연산으로 같으면 0 다르면 1이라는 것은 알고있었는데 이걸 전혀 어디에 응용할 줄 몰랐다.
근데 예전 행성 X3 문제에서도 모든 행성민끼리의 친밀도를 구했었는데 XOR 연산을 해서
- > 모든 수들의 각 자리의 비트 1 갯수, 0 갯수를 곱해주면 해당 비트의 총 경우의 수가 된다.
예를들어 1, 1, 0 이 2^0의 각 숫자의 비트였다고 하면 어떻게 조합을 하든 0, 1 1 , 1로 두 개의 경우의 수가 나온다.
이 경우 0, 1 일 때만 XOR 연산의 값이 1이다. 이때의 비트의 자릿수가 활성화 됨.
이런식으로 1과 0의 갯수를 알면 해결 가능.
근데 이번 문제는 XOR을 통해 짝이 안 맞는 숫자를 찾아낼 수 있었음 !
return Arrays.stream(arr).reduce((x,y) -> x ^ y).getAsInt();
또 이진수 두 개 중에 하나를 다른 하나로 바꾸기 위해 변경해야하는 비트수를 구할 때
int val = A ^ B를 해서 1인 갯수만 세어주면 됨.. (다르면 1이니까)
정규표현식 Pattern, Matcher
이건 정말 처음 보고 처음 써보는 클래스였다.
*Pattern : 정규식을 정의하는데 사용
*Matcher : 정규식(패턴)을 데이터와 비교하는 역할
Pattern p = Patterns.compile("([0-9]+)"); //하면 숫자만 골라내는 패턴 생성
Pattern p1 = Patterns.compile("([+\\-*/])"); //하면 +-*/ 골라내는 패턴 생성
-> 여기에 나는 역슬래쉬 두 개가 뭔가 진짜 한참 고민했는데 정규표현식에서 -가 어디서부터 어디까지의 의미로 쓰이는데 나는 저걸 기호 그대로 쓰고싶으니까 \하나 붙여줬는데 이것도\하나만 붙이면 확장문자로 인식이 돼서 하나 더 붙여 두 개 써준 거임 ! 두 개 쓰면 \\ 역슬래시 하나. \-는 -문자 그 자체 의미.
Matcher m = p.matcher(S); // s라는 문자열에서 pattern에 맞는 데이터만 m에 넣어줌.
while (m.find()) { //주어진 소스내에서 패턴과 일치하는 부분 찾으면 true
System.out.println(m.group()); // 정규식의 그룹화. 매칭된 부분을 리턴
}
신기하다 ! 노션에 더 자세히 정리해놨다.
String 관련함수
너무 익숙한 String이지만 또 처음 알게된 메소드가 생겼다.
- String.startWith("a") : a로 시작하는 문자열인지 검증 !
- String.endWith("A") : A로 끝나는 문자열인지 검증 !
또 많이 성장한 한 주 였던 듯...
새로운 거 알게되니까 재밌긴한데 양이 너무 많이 들어와서 좀 버겁긴하다.
해야지 어쩌겠우 ㅋㅋ
코테 3차를 엄청나게 조져놨는데 얼른 공부하면서 리팩토링 다시 해야겠다 ~.~
'ZB 백엔드 스쿨 > 주차별 정리' 카테고리의 다른 글
Pre 코딩테스트 1회차 회고 (1-1~1-5) (0) | 2023.07.28 |
---|---|
제로베이스 백엔드 부트캠프 2주차 정리 - Chapter02. 선형자료구조 (0) | 2023.07.21 |
제로베이스 백엔드 부트캠프 2주차 정리 - Chapter01. 기초수학 (1) | 2023.07.19 |
제로베이스 백엔드 부트캠프 1주차 정리 (0) | 2023.07.09 |