728x90
안녕하세요!
오늘도 한 문제를 풀었습니다.
프로그래머스 > 고득점kit > 해시의 level2 의상 문제였고, 힌트를 받아 정답을 맞혔습니다.
어제 'String을 기반으로 정보를 기록하고 관리해야할 때 무조건 해시를 써야 한다'는 가르침을 얻었습니다.
그래서 비록 해시 카테고리의 문제였지만, 아 해시를 써야 한다는 힌트들이 들어있구나! 생각했습니다.
해시를 사용하긴 했지만, 문제를 일반화하지 못했습니다^_ㅠ
예제를 가지고 수식을 만들다보면, (a+1)(b+1)...(n+1) - 1 라는 일반식이 도출됩니다.
저는 이 식으로 문제를 풀었습니다.
다른 분들의 풀이도 한 번 보았습니다.
같은 공식을 사용하였지만 stream을 통해 매우 명료하게 나타내셨습니다.
Arrays.stream(clothes)
.collect(groupingBy(p -> p[1], mapping(p -> p[0], counting())))
.values()
.stream()
.reduce(1L, (x, y) -> x * (y + 1)).intValue() - 1;
해석해보면,
이차원 배열인 clothes에 대해 스트림을 엽니다.
그리고 각 일차원 배열의 두번째 요소를 키로 그룹화 하며 개수를 셉니다.
이후 reduce연산을 통해 (a+1)(b+1)...(n+1)을 수행하고 int로 변경 후 -1을 합니다.
다음 해시 문제에서는 스트림을 한번 사용해보아야겠습니다 :)
728x90
'츄Log > 알고리즘 연습장' 카테고리의 다른 글
연습#10 Consecutive Characters (0) | 2023.12.10 |
---|---|
연습#9 Long Pressed Name (1) | 2023.12.10 |
연습#7 전화번호 목록 (0) | 2023.12.07 |
연습#6 H-Index (1) | 2023.12.06 |
연습#5 가장 큰 수 (1) | 2023.12.06 |