백준 동적프로그래밍 1932번, BFS 24445번 문제
프로그래머스 1단계 신고 결과 받기 문제
프로그래머스에서 문제를 처음 풀어보았는데.. 백준이랑 확실히 달라서 적응하느라 조금 힘들었다. 게다가 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/
어떤 스트림에서 중복되는 아이템들을 모두 제거해주고 새로운 스트림을 반환하는 것. 아래 코드에서 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/
Collect는 Stream의 데이터를 변형 등의 처리를 하고 원하는 자료형으로 변환해준다.
Collect가 제공하는 기능 중 하나로, 스트림의 아이템들을 List 또는 Set 자료형으로 변환하는 게 있다.
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/
map은 요소들을 특정 조건에 해당하는 값으로 변환해준다. 요소들을 대,소문자 변형 등 의 작업을 하고 싶을떄 사용 가능하다.
list.stream().map(s->s.toUpperCase());
list.stream().map(String::toUpperCase);
filter는 요소들을 조건에 따라 걸러내는 작업을 해준다. 길이의 제한, 특정문자 포함 등의 작업을 하고 싶을 때 사용 가능하다.
list.stream().filter(t->t.length()>5)
출처 : https://dpdpwl.tistory.com/81
'비교 대상 문자열'이 '입력된 문자열' 값으로 시작되는지 여부를 확인하고 boolean값으로 리턴한다.
String str1 = "자바 코딩";
System.out.println(str1.startsWith("자바"));
출처 : https://jamesdreaming.tistory.com/86
스트림을 IntStream으로 변환해주는 메서드이고, IntStream을 제외한 모든 스트림에서 동일하게 제공하는 메서드이다.
출처 : https://dev-kani.tistory.com/32
...
이 내용들을 바로 다 기억할 수는 없겠지만... 다시 필요할 때 이 내용을 다시 검색해서 찾아보면서 이렇게 기록해둔 것을 잘 써먹길 바란다..! 다른 분들이 기록을 잘 해두는 게 좋다고 하셨는데 나도 내 기억력을 믿으려고 하기 보다는 기록을 잘 해두어야겠다..!