본문 바로가기
츄Log/알고리즘 연습장

연습#8 의상

by 츄츄🦭 2023. 12. 8.
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