Today I Learned

TIL 2022-06-21

제이G 2022. 6. 22. 01:43

알고리즘

https://dvjgdiary.tistory.com/20 (프로그래머스Lv1 - 신고결과받기)

배운점:

1. HashMap, HashSet 활용

String <HashSet>
(중복X)
A [C, D, E]
B [C, A, D]
C [A, B]
D [E]
E [A, B]

다음과 같은 (Key, Value)형태로 데이터를 저장하고싶을 땐 HashMap + HashSet 사용

HashMap<String , HashSet<String>> map = ~~~

 

Entry에 HashSet이 포함되어있으므로 초기화시 HashSet을 생성해줘야 한다.

for (int i=0; i<map.size(); i++) {
	map.put(id_list[i], new HashSet<>);
}

 

 

HashMap의 value에 값추가

HashMap.get(Key)는 해당 Key에 대한 Value값을 리턴한다. 위의 경우 HashSet<>을 리턴받으므로 HashSet의 Operation을 사용할 수 있다. 따라서, HashSet의 add( )메소드를 사용하여 값을 추가하면 된다.

for (int i=0; i<map.size(); i++) {
	map.get(id_list[i]).add("하이");
}

 

 

 

2. 2중for문 --> 1중for문으로 단축

reporter reported
A [C, D, E]
B [C, A, D]
C [A, B]
D [E]
E [A, B]

reported 의 각 ID가 몇개있는지 Count하고싶다고 해보자.

위와같은 [reporter, reported] 구조에선 Count하기 위해 전체 for문을 돌며 각 reported의 for문을 돌아서 확인해야할 것이다. -> O(N^2)

 

reported reporter
A [B, C, E]
B [C, E]
C [A, B]
D [A, B]
E [A, D]

하지만, [reported, reporter] 구조로 자료를 저장하면 전체 for문을 돌며 각 reporter의 길이만 확인하면 된다. --> O(N)

 

소소하지만 발상의 전환연습

 


https://dvjgdiary.tistory.com/21 (프로그래머스Lv1 - 두 개 뽑아서 더하기)

배운점:

1. dfs, 구현방식의 조합구하기

2. 중복X는 HashSet사용

3. HashSet은 Unordered Collection으로서 정렬이 안되므로 linkedList(Collection c) 생성자로 List를 만들고 Collections.sort( List l ) 메소드로 정렬