관리 메뉴

ballqs 님의 블로그

TIL - 2024년 07월 18일 공부한 내용 정리하기(Set) 본문

내일배움캠프/Java

TIL - 2024년 07월 18일 공부한 내용 정리하기(Set)

ballqs 2024. 7. 18. 21:15

1.오늘 배운 것

2022 카카오 블라인드 코딩 문제를 풀다가 어떻게 접근해야할지 수없이 고민을 하다가 배운 것이 있다.

Set을 사용하는 것과 Map에 Set를 적용하여 사용하는 방법에 대해서 알게 되었다.

 

2.문제 풀어나가는 과정

2022 카카오 블라인드 신고 결과 받기 코딩 문제를 푸는 도중 문제에 맞닥뜨렸다.

각 멤버가 다른 멤버를 신고하며 횟수에 따른 메일 발송 유무를 정하는 그런 프로세스가 필요했다.

다만 중복 신고가 있으면 1회 신고한 것으로 간주한다는 특수 조건이 있었다

어떻게 접근할까 고민을 많이 하다가 생각해낸 것이 Set이였다.

중복으로 신고를 해도 Set를 통해 중복 요소를 허용하지 않게 된 것이다.

Set의 기본 사용은 아래와 같다.

Set<String> set= new HashSet<>();
set.add("a");
set.add("a");
System.out.println(set);  // "a"

 

다만 위 예제대로라면 A멤버가 B멤버를 신고한 내역은 어떻게 저장할까? 고민 끝에 Map에 Set를 넣어서 적용해보았다.

Map<String , Set<String>> report_history = new HashMap<>();
report_history.put("멤버이름" , new HashSet<String>());

 

위 코드의 방법으로 Map에 중복제거된 각 멤버별 신고리스트를 추려 내는 것이 가능해졌다.

 

그렇게 진행하여 문제 풀어 나갈 수 있게 되었다.

 

그리고 공부한 Set은 따로 기술로 정리 해두었다.

Set 정리 내용

 

[Java] Set 사용법

Set 이란?Set은 중복 요소를 허용하지 않는 Java Collection Framework의 인터페이스입니다. Set 특징중복 요소를 허용하지 않습니다.순서가 없습니다.엑세스가 빠릅니다.indexing이 없습니다.primitive type가

ballqs.tistory.com

 

위에 작성한 문제는 아래와 같다.

노션 문제 풀이

 

신고 결과 받기 | Notion

문제 사이트

stirring-astronomy-a9b.notion.site

 

3.해당 개념이 중요한 이유

Set이라는 키워드 자체를 몰랐더라면 아마 방향성 조차도 잡지 못하고 풀지 못했을 문제였을것이다.

해당 문제를 풀수 있도록 도와주신 튜터님께 감사의 말씀드립니다.

Set을 사용했기에 Map안에 Map를 다시 집어넣는 그런 생각을 멈추었다. 런타임 일어나요ㅠㅠ

그리고 갈길이 더 명확하게 보이기 시작하였고 중복제거가 되기 시작하니 어떻게 풀어나갈지 시야가 보였다.

그렇게 해당 문제를 풀고나서 다른 사람 문제 풀이 방식을 봤는데 Arrays.stream(배열).distinct() 를 사용했다...

저건 또 뭐지?... 공부할 거리가 하나 더 늘었다.