나라 이름과 인구를 입력하세요.(예: Korea 5000)
나라 이름, 인구 >> Korea 5000
나라 이름, 인구 >> USA 1000000
나라 이름, 인구 >> Swiss 2000
나라 이름, 인구 >> France 3000
나라 이름, 인구 >> 그만
인구 검색 >> France
France의 인구는 3000
인구 검색 >> 스위스
스위스 나라는 없습니다.
인구 검색 >> 그만
▼정답
package CollectionF;
import java.util.*;
public class HashMapTest1 {
public static void main(String[] args) {
Map<String, Integer> con = new HashMap<>();
String contry = null;
int pop = 0;
String input = null;
Scanner sc = new Scanner(System.in);
System.out.println("나라 이름과 인구를 입력하세요.(예: Korea 5000)");
while (true) {
System.out.print("나라 이름, 인구 >> ");
contry = sc.next();
if (contry.equals("그만")) {
System.out.println();
break;
}
try {
pop = sc.nextInt();
} catch (Exception e) {
System.out.println("숫자가 아닙니다.");
sc.nextLine();
continue;
}
con.put(contry, pop);
}
while (true) {
Set<String> ks = con.keySet();
System.out.print("인구 검색 >> ");
input = sc.next();
if (input.equals("그만")) {
System.out.println("종료합니다.");
break;
} else if (con.get(input) != null) {
System.out.println(input + "의 인구는 " + con.get(input));
} else
System.out.println(input + "은(는) 없습니다.");
}
}
}
도시 이름, 위도, 경도 정보를 가진 Location 클래스를 작성하고, 도시 이름을 '키'로 하는 HashMap<String, Location> 컬렉션을 만들고, 사용자로부터 입력 받아 4개의 도시를 저장하라. 그리고 도시 이름으로 검색하는 프로그램을 작성하라.
도시, 경도, 위도를 입력하세요.
>> 서울, 37, 126
>> LA, 34, -118
>> 파리, 2, 48
>> 시드니, 151, -33
----------------------------------
서울 37 126
LA 34 -118
파리 2 48
시드니 151 -33
----------------------------------
도시 이름 >> 피리
피리는 없습니다.
도시 이름 >> 파리
파리 2 48
도시 이름 >> 그만
▼정답
//도시 이름, 위도, 경도 정보를 가진 Location 클래스를 작성하고,
//도시 이름을 '키'로 하는 HashMap<String, Location> 컬렉션을 만들고,
//사용자로부터 입력 받아 4개의 도시를 저장하라. 그리고 도시 이름으로 검색하는 프로그램을 작성하라.
package CollectionF;
import java.util.*;
class Location {
int lat; // 경도
int lng; // 위도
public Location(int lat, int lng) {
this.lat = lat;
this.lng = lng;
}
public String toString() {
return this.lat + " " + this.lng;
}
}
public class HasMapTest2 {
public static void main(String[] args) {
Map<String, Location> list = new HashMap<>();
StringTokenizer token;
String name = null;
String input = null;
Scanner sc = new Scanner(System.in);
System.out.println("도시, 경도, 위도를 입력하세요. (예: 서울 37 126)");
while (list.size() < 4) {
System.out.print(">> ");
name = sc.nextLine();
token = new StringTokenizer(name, " ,");
if (name.equals("그만")) {
System.out.println();
break;
}
while (token.hasMoreTokens()) {
name = token.nextToken();
int lat = Integer.valueOf(token.nextToken());
int lng = Integer.parseInt(token.nextToken());
list.put(name, new Location(lat, lng));
}
}
while (true) {
Set<String> ks = list.keySet();
System.out.print("도시 이름 >> ");
input = sc.next();
if (input.equals("그만")) {
System.out.println("종료합니다.");
break;
} else if (list.get(input) != null) {
System.out.println(input + " " + list.get(input));
} else
System.out.println(input + "은(는) 없습니다.");
}
}
}
▼정답
[큐]
큐는 한쪽 끝에서 삽입 작업이, 다른 쪽 끝에서 삭제 작업이 양쪽으로 이루어진다.
선입선출(FIFO, First in first out) 방식의 자료구조.
한쪽 끝에서 삽입 작업이, 다른 쪽 끝에서 삭제 작업이 양쪽으로 이루어진다.
[스택]
스택(stack)이란 쌓아 올린다는 것을 의미한다.
후입선출(LIFO, Last-In-First-Out) 방식의 자료구조.
같은 구조와 크기의 자료를 정해진 방향으로만 쌓을수 있고, top으로 정한 곳을 통해서만 접근한다.
가장 마지막에 삽입된 자료가 가장 먼저 삭제된다.
▼정답
1. 요소의 저장 순서를 유지하지 않는다.
2. key : 중복 허용 X
value : 중복 허용O
Map은 key를 통해 value를 얻는다.
키와 값을 하나의 쌍으로 저장하는 방식(key-value 방식)을 사용
HashMap과 TreeMap이 있다.
HashMap<K, V>
입력된 순서나 Key 값의 정렬 순서는 지켜지지 않고 다 섞이게 된다. 다만 다른 Map에 비해 빠른 탐색시간을 갖는다. 해시 함수를 사용하기 때문에 O(1)의 시간 복잡도를 갖는다.
TreeMap<K, V>
Tree 자료구조의 특성상 반복자가 정렬된 순서대로 Key들에 접근한다.
데이터를 내부적으로 RB-Tree 형태로 관리하기 때문에 데이터를 탐색하는데 O(log N)의 시간이 걸린다
TreeMap<Integer, String> map = new TreeMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");
▼정답
package CollectionF;
import java.util.*;
public class TreeMapTest {
public static void main(String[] args) {
TreeMap<Integer, String> map = new TreeMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");
System.out.println("45번: " + map.get(45));
System.out.println("37번: " + map.get(37));
System.out.println("23번: " + map.get(23));
//=====================================================================
Set<Integer> ks = map.keySet();
for (Iterator<Integer> itr = ks.iterator(); itr.hasNext();)
System.out.print(map.get(itr.next()) + '\n');
System.out.print(map);
System.out.println();
}
}
[결과]
45번: Brown
37번: James
23번: Martin
Martin
James
Brown
{23=Martin, 37=James, 45=Brown}