1. 오늘 학습한 내용

백준 동적프로그래밍 1932번, BFS 24445번 문제
프로그래머스 1단계 신고 결과 받기 문제

2. 알게 된 내용

프로그래머스에서 문제를 처음 풀어보았는데.. 백준이랑 확실히 달라서 적응하느라 조금 힘들었다. 게다가 IDE를 안 쓰고 하니까.. 더 낯설었다. 그래도 조금씩 프로그래머스에서 문제들을 풀어보면서 익숙해지도록 해야겠다.

나는 '신고 결과 받기' 문제를 풀면서 그래프를 떠올렸고, 인접행렬 형태로 나타내야겠다는 생각을 했다. 처음에는 조금 막막하고 잘못 구현하고 그랬는데, 시간이 조금 더 걸리더라도 한번 문제에서 말한 예제를 직접 내가 원하는 대로 인접행렬 표로 정리해보았다. 확실히 더 잘 이해가 되었고 내가 원하는 대로 구현할 수 있었다.

물론 조금 돌아가는 느낌은 없지 않아 있지만..

그런데 다른 분들의 코드를 보니... 진짜 짜임새있게 구현하셨다... 솔직히 자바 수업 때 배운 스트림, 람다식 이런 것들 거의 다 잊어버렸었는데... 이 분들은 이 스트림과 람다식까지 완전 철저하게 쓰시면서 짧고 확실한 코드로 구현을 해내셨다... 이해하는데에도 모르는 게 많아서 구글링하면서 공부하느라 시간이 많이 걸렸지만... 그래도 새로운 해결책을 알아간다..!

아래는, 다른 분들 코드 공부하면서 알게 된 내용을 정리한 것이다.

배열 스트림

스트림은 배열 또는 컬렉션 인스턴스를 이용해서 생성할 수 있다. 배열은 다음과 같이 Arrays.stream 메서드를 사용한다.

String[] arr = new String[]{"a", "b", "c"};
Stream<String> stream = Arrays.stream(arr);
Stream<String> streamOfArrayPart = 
  Arrays.stream(arr, 1, 3); // 1~2 요소 [b, c]

출처 : https://futurecreator.github.io/2018/08/26/java-8-streams/

Stream의 distinct

어떤 스트림에서 중복되는 아이템들을 모두 제거해주고 새로운 스트림을 반환하는 것. 아래 코드에서 stream1.distinct()는 스트림에서 중복을 제거한 새로운 스트림을 반환했다.

List<String> strings =
        Arrays.asList("google", "apple", "google", "apple", "samsung");

Stream<String> stream1 = strings.stream();
Stream<String> stream2 = stream1.distinct();
stream2.forEach(System.out::println);

[결과]

google
apple
samsung

출처 : https://codechacha.com/ko/java8-stream-distinct/

Stream의 Collect

Collect는 Stream의 데이터를 변형 등의 처리를 하고 원하는 자료형으로 변환해준다.
Collect가 제공하는 기능 중 하나로, 스트림의 아이템들을 List 또는 Set 자료형으로 변환하는 게 있다.

  • Stream의 아이템들을 List 객체로 리턴
    • Collectors를 이용하여 스트림의 아이템들을 List 객체로 리턴할 수 있다.
    • toList()를 인자에 넣어주면 List 객체로 리턴된다.
Stream<String> fruits = Stream.of("banana", "apple", "mango", "kiwi", "peach", "cherry", "lemon");
List<String> fruitList = fruits.collect(Collectors.toList());

출처 : https://codechacha.com/ko/java8-stream-collect/

Stream의 map

map은 요소들을 특정 조건에 해당하는 값으로 변환해준다. 요소들을 대,소문자 변형 등 의 작업을 하고 싶을떄 사용 가능하다.

  • 리스트의 요소들을 대문자로 변경해주는 코드
list.stream().map(s->s.toUpperCase());
list.stream().map(String::toUpperCase);

Stream의 filter

filter는 요소들을 조건에 따라 걸러내는 작업을 해준다. 길이의 제한, 특정문자 포함 등의 작업을 하고 싶을 때 사용 가능하다.

  • 요소의 크기가 5 이상인 값만 뽑아내는 코드
list.stream().filter(t->t.length()>5)

출처 : https://dpdpwl.tistory.com/81

String의 startsWith

'비교 대상 문자열'이 '입력된 문자열' 값으로 시작되는지 여부를 확인하고 boolean값으로 리턴한다.

  • "자바 코딩"이 "자바"로 시작되는지를 체크하는 코드
String str1 = "자바 코딩";
System.out.println(str1.startsWith("자바"));

출처 : https://jamesdreaming.tistory.com/86

Stream의 mapToInt 메서드

스트림을 IntStream으로 변환해주는 메서드이고, IntStream을 제외한 모든 스트림에서 동일하게 제공하는 메서드이다.

출처 : https://dev-kani.tistory.com/32

...

이 내용들을 바로 다 기억할 수는 없겠지만... 다시 필요할 때 이 내용을 다시 검색해서 찾아보면서 이렇게 기록해둔 것을 잘 써먹길 바란다..! 다른 분들이 기록을 잘 해두는 게 좋다고 하셨는데 나도 내 기억력을 믿으려고 하기 보다는 기록을 잘 해두어야겠다..!

profile
기록하자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN