이번에 코딩테스트를 하면서 중복값에 관련한 문제를 풀게 되었다.
중복값 하면 'HashMap' 을 쓰면 코드 수 를 줄이고 문제를 풀 수 있을 것같다.
이번에는 문제를 풀어보면서 HashMap을 쓰는 법을 포스팅해보려한다.
HashMap은 그냥 쓴다고 하면 쓸 수 있지만 문제를 풀기위해서는 값을 알아야 하므로 간단하게 정리한 아래 코드를 보면 쉽게 사용할 수 있다.
지금 당신이 코딩테스트 중 이라면 아래 내용을 조금만 집중해서 보고 활용하면 금방 풀 수 있다!
1. 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
30
31
32
33
|
package 해시맵;
public class Main {
static HashMap<String, Integer> map = new HashMap<String, Integer>();
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String s;
while((s=sc.nextLine()) != null) {
if(map.containsKey(s)) {
}else {
map.put(s, 1);
}
Set set = map.entrySet();
Iterator it = set.iterator();
while(it.hasNext()) {
System.out.println("이름: "+e.getKey()+"갯수: "+e.getValue());
}
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
우선 위의 코드를 한줄 씩 살펴 보자!
static HashMap<String, Integer> map = new HashMap<String, Integer>();
는 HashMap을 생성하는 것이다 <String, Integer> 에서 String은 key, Integet 는 value 이다.
메인 으로 가서
while((s=sc.nextLine()) != null) {
if(map.containsKey(s)) {
int temp = map.get(s);
map.put(s, temp+1);
}else {
map.put(s, 1);
}
코드를 보면 while((s=sc.nextLine()) != null) 내가 입력을 할 때마다 2가지 조건을 준다.
이 부분은 본인이 입력값을 컨트롤 하면 되는 부분! 미리 입력을 받아서 for문을 돌려도 된다.
map.containsKey(s) => IF문 안에 있는 containsKey 는 이미 값이 있으면 true, 없으면 false를 주기 때문에 있을때와 없을때를 구분하기 위하여 썻다.
그다음 map.put(s, 1); 을 알아보자.
put은 값을 넣는 함수이므로 s 는 Key, 1은 처음 들어가기 때문에 1 값을 지정해서 준것이다.
s 같은 경우에는 ant, bee, daragonfly 같은 벌레가 될 수 도 있다.
int temp = map.get(s);
map.put(s, temp+1);
이 부분은 만약 이미 key 값이 있다면 키의 value를 가져와서 1을 추가하는것이다. 즉 중복이 있다면 key만 올리는것
map.get(s)는 s라는 키의 value값을 가진다는 것을 알 수 있다.
그 다음 사이즈 알기!
System.out.println(map.size());
map.size() 는 key의 갯수라고 생각하면 편하다.
이제 HashMap 에서 가장 중요한 부분이다.
Set set = map.entrySet();
Iterator it = set.iterator();
while(it.hasNext()) {
Map.Entry e = (Map.Entry)it.next();
System.out.println("이름: "+e.getKey()+"갯수: "+e.getValue());
이 코드를 보면 의아 할 수 가 있다. Map자체로 반복문을 돌려서 값을 보여주는게 아니라
Set, Iterator를 사용하여 값을 추출하고 Map.Entry 까지 사용하게 된다.
어려우면 그냥 복붙으로 사용하면 간편..ㅎ
이게 HashMap을 쓸 때 가장 힘든 부분인데 간단하게 이해만 하면 편리하게 쓸 수 있다고 생각한다.
위와 같을때 결과 값을 보면
위의 코드를 활용하면 간단하게 HashMap을 사용하여 구현이 가능하다.
활용한다면 여러 코딩테스트에 나오는 문제들도 조금만 변형하여 풀 수도 있다.
'서버 개발' 카테고리의 다른 글
로컬 포트 3000 닫기, 포트 죽이기 (0) | 2020.11.06 |
---|---|
비쥬얼 스튜디오 코드(Visual Studio Code) 폰트 (Font) 설정하기 (1) | 2020.09.21 |
[java] 백준 알고리즘 10872번 팩토리얼 개인 풀이 (0) | 2019.07.11 |
Git hub 간편한 이용 첫 푸쉬, push하기 (1) | 2019.05.06 |
우분투16.04LTS 에 APM 수동설치(소스설치) 하는 법 및 문제해결 (0) | 2019.03.20 |