일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 이노베이션캠프
- 이것이 자바다
- 객체지향
- 자바의 정석 6장
- 조건문과 반복문
- 자바 언어 기초
- JAVA 기초
- 트리 지름 구하기
- 백준
- 웹개발 기본지식
- Java
- 이노베이션캠프 동북
- 이노베이션 캠프
- 챗GPT 명령어 작성팁
- 스프링 입문강의
- 자료구조
- 이노캠
- Til
- ChatGPT
- dfs
- ArrayList 개념
- 3장 확인문제
- 이것이 자바다 연습문제
- BFS
- 자바
- 이것이 자바다 확인문제
- 채팅GPT
- 이것이 자바다 13장
- 인프런
- Comparable과 Comparable
- Today
- Total
기록공간
[TIL] 프로그래머스 알고리즘 Study 본문
두 매개변수 입력으로 String 배열을 입력받을때, 두 문자열사이, 같은 문자가 얼마나 있는지 구하는 문제였다.
어떻게 풀어야할지 고민하다가 HashMap 자료구조를 써야겠다는 생각이 들었다. HashMap은 데이터를 <Key,Value>형태로 아래와 같은 구조로 저장한다.
s1의 문자배열에 각 문자를 Key와 나온횟수 Value만큼 담고, s2 배열로 탐색을해, 존재하면 count형식으로 진행했다.
이렇게 할 수 있었던 이유는 자바에서 HashMap 자료구조 패키지를 담고있기 때문에 가능했다.
HashMap 자료구조의 이점은 다음과 같다.
1. 빠른 탐색: HashMap은 key를 이용하여 데이터를 탐색하기 때문에, key를 알고 있다면 매우 빠른 속도로 데이터를 찾을 수 있다.
2. 유연한 크기: HashMap은 크기를 동적으로 조정할 수 있기 때문에, 데이터의 추가/삭제가 자주 일어나는 경우에 유용하다.
3. 중복 데이터 처리: HashMap은 key를 중복해서 저장할 수 없기 때문에, 중복된 데이터를 처리하는 데 유용하다.
4. 다양한 데이터 타입: HashMap은 key와 value에 다양한 데이터 타입을 사용할 수 있기 때문에, 다양한 데이터를 저장하는 데 유용하다.
5. 캐싱: HashMap은 캐싱에 매우 유용한 자료구조이다. 이전에 탐색한 데이터를 저장해 두고 다음 탐색 때 빠르게 참조할 수 있다는 특징이 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import java.util.HashMap;
class Solution {
public int solution(String[] s1, String[] s2) {
// HashMap 선언
HashMap<String, Integer> map = new HashMap<>();
int count = 0;
// s1 문자열 배열에서 문자를 하나씩 꺼내서 HashMap에 ***
for(String s : s1){
if(map.containsKey(s)){ // 각 문자가 이미 존재하면,
map.put(s, map.get(s)+1); // 이전에 세었던 개수에 +1
} else { // Map에 존재하지 않으면,
map.put(s,1); // 1 초기화
}
}
// s2 문자열 배열에서 문자를 하나씩 꺼내서 HashMap에서 검색
for(String s : s2){
if(map.containsKey(s) && map.get(s)>0) { // s2의 문자가 Map에 존재하면서 0보다 클 경우
count++; // 유사도 1증가
map.put(s,map.get(s)-1); // 이미 세었으니, -1
}
}
return count;
}
}
|
cs |
프로그래머스 코테문제를 풀다가, 우연히 다른사람 코드를 보았는데 너무 간결하고 강력해보이는 것이 있었다
나는 어찌저찌해서,, for문과 배열을 이용해서 풀었지만
다른사람들은 어떻게했나 보다가 위처럼 한줄로 끝나는 강력한 코드가 있었다
다음번엔 Stream패키지를 배워서 자유자재로 사용해보고 싶다는 생각이들었다
'TIL(Today I Learned)' 카테고리의 다른 글
[TIL] 웹개발 종합반 1주차 (0) | 2023.05.08 |
---|---|
[TIL] 05.04 (0) | 2023.05.04 |
[TIL] BOJ - 2739,10430,2439,2775,2579,1744(JAVA) (0) | 2023.05.01 |
[TIL] 이노베이션 캠프 in 동북 Part 05 . 객체지향 1 (0) | 2023.04.28 |
[TIL] 이노베이션캠프 in 동북 Part 03. 조건문과 반복문 (0) | 2023.04.26 |