전체 글 552

자료구조 : Hash

컴퓨터 사이언스에서 대표적인 자료구조인 Hash는 key-value로 값을 찾는 알고리즘에 있어서 가장 빠른 속도를 보여줍니다. 때문에 많은 언어에서 Hash 자료구조를 구현해서 사용하고 있습니다. 이번 포스팅에서는 Hash는 무엇이고 어떻게 값을 찾는지, 자바에서는 어떻게 활용하고 있는지에 대해서 알아보도록 하겠습니다. Hash Hash란 무엇일까요? Hash는 특정한 숫자 혹은 문자 혹은 둘의 혼합으로 이루어진 key라고 생각하시면 됩니다. 보통 어떤 값은 Hash Function에 의하여 해쉬로 바뀝니다. 그리고 그 Hash를 key로 하는 저장 공간을 만들고 나중에 해당 값을 찾으려면 그 값의 Hash값을 대응해서 찾습니다. Hash Function은 key를 고정된 길이의 해쉬로 변경해주는 역할..

4장 주요개념 및 복습

주요 개념은 HashMap으로 HashMap에 관련된 내용은 해당 포스팅 참조 https://coding-review.tistory.com/277 Map 자료구조 오늘은 알고리즘 문제에서도 많이 사용하고 실전에서도 많이 사용한다고 알려져있는 Map에 대해서 알아보도록 하겠습니다. Map 맵은 사전과 비슷합니다. people이란 단어에 "사람", baseball이란 단어 coding-review.tistory.com 전체적인 문제들은 HashMap을 적절히 사용하면 되는 문제였다. 마지막 문제는 Set을 사용하는 문제도 나오지만 Set은 추후 다룰예정 간단하게 설명하자면 Set은 중복을 허용하지 않는 (중복을 제거하는) 자료구조로 많이 사용한다. 그 중 TreeSet은 정렬이 포함된 자료구조 개인적으로 생..

4-5. K번째로 큰 수

package HashMap그리고TreeSet4장.K번째로큰수4다시5.my; import java.util.*; import java.util.stream.Collectors; public class Main { /** * Set 자료구조를 사용하면 간단하게 풀리는 문제 * Set 은 중복을 허용하지 않는다. 거기다 오름차순 내림차순으로 정렬하고싶다면 TreeSet 을 사용하면 된다. * TreeSet 은 선언하고 입력받는 것들을 정렬해준다. * 비슷한 것으로 TreeMap 이 있다. * * 자세한 내용은 선생님의 풀이 참고고 */ public static void main(String[] args) { Scanner kb = new Scanner(System.in); int n = kb.nextInt(..

4-4. 모든 아나그램 찾기

package HashMap그리고TreeSet4장.모든아나그램찾기4다시4.my; import java.util.HashMap; import java.util.Scanner; public class Main { /** * 피드백 할 것 없음 이전 문제와 완벽히 동일 */ public static void main(String[] args) { Scanner kb = new Scanner(System.in); String input1 = kb.next(); String input2 = kb.next(); System.out.println(solution(input1, input2)); } private static int solution(String input1, String input2) { int ans..

4-3. 매출액의 종류

package HashMap그리고TreeSet4장.매출액의종류4다시3.my; import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner; public class Main { /** * sliding window 와 HashMap 을 섞어서 사용했다. * 피드백 X */ public static void main(String[] args) { Scanner kb = new Scanner(System.in); int date = kb.nextInt(); int length = kb.nextInt(); int[] arr = new int[date]; for (int i = 0; i < date; i++) { arr[i] = kb..

4-1. 학급회장

package HashMap그리고TreeSet4장.학급회장4다시1.my; import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner; public class Main { /** * -내 풀이- * 진짜 겁나 더럽게 풀었다... * HashMap 에 각각 A, B, C, D, E 를 배열처럼 넣고 * 입력받은 문자열을 ArrayList 에 담아 해당 list 를 streamAPI 로 돌려서 equals 로 거르고 count 로 계산 * * -선생님 풀이- * 정말 간단하게 풀었는데 핵심은 HashMap 클래스의 getOrDefault 를 통해 카운팅을 했다. * HashMap map = new HashMap(); * Stri..

ConcurrentMap, ConcurrentHashMap

이번 포스팅은 기존 Map 인터페이스의 구현체 중 thread-safe 하다고 알려져있는 바로 그 구현체 ConcurrentMap입니다. 앞선 포스팅인 Map에 대한 기본적인 내용과 지금 쓰려는 이 내용은 지식의 깊이부터 다르기 때문에 성격이 맞지않다고 판단하여 따로 분리하여 포스팅하였습니다. 들어가기에 앞서 Map은 자바 컬렉션 중에서 가장 대중적으로 사용하는 것 중 하나입니다. 그리고 그 중 가장 많이 사용하는 HashMap은 thread-safe 하지 않은 구현체입니다. java 1.5 이전 (ConcurrentMap이 나오기 전) 에는 Hashtable이라는 클래스를 많이 사용했습니다. Hashtable은 HashMap과 다르게 멀티스레드 환경에서 thread-safe를 보장합니다. 하지만 Has..

Java 2023.02.18

자료구조 : Map

오늘은 알고리즘 문제에서도 많이 사용하고 실전에서도 많이 사용한다고 알려져있는 Map에 대해서 알아보도록 하겠습니다. Map 맵은 사전과 비슷합니다. people이란 단어에 "사람", baseball이란 단어에 "야구" 라는 뜻이 부합되듯이 Map은 Key와 Value라는 것을 한 쌍으로 갖는 자료구조입니다. Map은 리스트나 배열처럼 순차적으로 해당 요소 값을 구하지 않고 Key를 통해서 Value를 얻습니다. Map의 가장 큰 특징은 Key로 Value를 얻어낸다는 것입니다. people이라는 단어의 뜻을 찾기 위해서 사전의 내용을 순차적으로 검색하는 것이 아니라 해당 단어가 있는 곳만을 펼쳐보는 것이죠. 우리가 잘 아는 Map은 List와 마찬가지로 인터페이스입니다. Map인터페이스를 구현한 Has..

3장 주요 개념 및 복습

3장의 주요 개념은 역시 Two Pointers Algorithm (이하 투 포인터 알고리즘) 이다. 대부분의 문제는 투 포인터 알고리즘을 적용하면 간단하게 풀 수 있는 문제이다. 그 중에서 투 포인터 알고리즘의 변형 문제인 Sliding Window (이하 슬라이딩 윈도우) 를 익히면 완벽할 것 같다. 하지만 3-6. 최대 길이 연속 부분수열 문제를 다시 한번 확인할 필요가 있다. https://coding-review.tistory.com/275 3-6. 최대 길이 연속 부분수열 package 배열응용3장.최대길이연속부분수열3다시6.my; import java.util.Scanner; public class Main { /** * -내 풀이- * 0을 1로 바꾸는 작업을 하는 것에 초점이 맞아서 풀지..