티스토리 뷰
1.아래를 프로그래밍 하시오.
하나의 학생 정보를 나타내는 Student 클래스에는 이름, 학과, 학번, 학점 평균을 저장하는 필드가 있다.
학생 이름, 학과, 학번, 학점평균 입력하세요.
>> 황기태, 모바일, 1, 4.1
>> 이재문, 안드로이드, 2, 3.9
>> 김남윤, 웹공학, 3, 3.5
>> 최찬미, 빅데이터, 4, 4.25
1-1번
학생마다 Student 객체를 생성하고 4명의 학생 정보를 `ArrayList<Student> 컬렉션`에 저장한 후에,
ArrayList<Student>의 모든 학생(4명) 정보를 출력하고
학생 이름을 입력 받아 해당 학생의 학점 평균을 출력하는 프로그램을 작성하라.
----------------------------------
이름: 황기태
학과: 모바일
학번: 1
학점평균: 4.1
----------------------------------
이름: 이재문
학과: 안드로이드
학번: 2
학점평균: 3.9
----------------------------------
이름: 김남윤
학과: 웹공학
학번: 3
학점평균: 3.5
----------------------------------
이름: 최찬미
학과: 빅데이터
학번: 4
학점평균: 4.25
----------------------------------
학생 이름 >> 최찬미
최찬미, 빅데이터, 4, 4.25
학생 이름 >> 이재문
이재문, 안드로이드, 2, 3.9
학생 이름 >> 그만
1-2번
ArayList<Student> 대신, `HashMap<String, Studnet>` 해시맵을 이용하여 다시 작성하라.
해시맵에서 키는 학생 이름으로 한다.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;
class Stu {
private String name, major;
private int number;
private double gpa;
public Stu(String name, String major, int number, double gpa) {
this.gpa = gpa;
this.major = major;
this.name = name;
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public double getGpa() {
return gpa;
}
public void setGpa(double gpa) {
this.gpa = gpa;
}
@Override
public String toString() {
return "이름: " + getName() + '\n' + "학과: " + getMajor() + '\n'
+ "학번: " + getNumber() + '\n' + "학점 평균: " + getGpa() + '\n';
}
}
public class N1_2_Student_HashMap {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("학생 이름, 학과, 학번, 학점평균 입력하세요.");
final int sNum = 4;
// 출력
// HashMap은 반드시 Key- value 두 개가 들어가야 함
// 학생 이름이 key가 됨. 중복되지 않으니까
HashMap<String, Stu> map = new HashMap<>();
for (int i = 0; i < sNum; i++) {
System.out.print((i + 1) + "번>> ");
String stuInfo = sc.nextLine();
StringTokenizer st = new StringTokenizer(stuInfo, ",");
String name = st.nextToken().trim();
String major = st.nextToken().trim();
int number = Integer.valueOf(st.nextToken().trim());
double gpa = Double.parseDouble(st.nextToken().trim());
Stu student = new Stu(name, major, number, gpa);
// 학생 이름이 key
map.put(name, student);
}
Set<String> key = map.keySet();
// Set을 순차검색하는 이터레이터 리턴
Iterator<String> it = key.iterator();
while (it.hasNext()) {
String name = it.next();
Stu student = map.get(name);
System.out.println("---------------------------");
System.out.println("이름:" + student.getName());
System.out.println("학과:" + student.getMajor());
System.out.println("학번:" + student.getNumber());
System.out.println("학점평균:" + student.getGpa());
}
// HashMap검색
while (true) {
System.out.print("학생이름 (종료를 원하시면 '그만'를 입력하세요.) >> ");
String stuname = sc.next();
if (stuname.equals("그만"))
break;
Stu student = map.get(stuname);
System.out.println("---------------------------");
System.out.println("이름:" + student.getName());
System.out.println("학과:" + student.getMajor());
System.out.println("학번:" + student.getNumber());
System.out.println("학점평균:" + student.getGpa());
System.out.println("---------------------------");
}
System.out.println("종료");
}
}
|
cs |

2. 다음을 프로그래밍 하시오.
"그만"이 입력될 때까지 나라 이름과 인구를 입력 받아 저장하고,
다시 나라 이름을 입력받아 인구를 출력하는 프로그램을 작성하라.
다음 해시맵을 이용하라.
=========================================================
나라 이름과 인구를 입력하세요.(예: Korea 5000)
나라 이름, 인구 >> Korea 5000
나라 이름, 인구 >> USA 1000000
나라 이름, 인구 >> Swiss 2000
나라 이름, 인구 >> France 3000
나라 이름, 인구 >> 그만
인구 검색 >> France
France의 인구는 3000
인구 검색 >> 스위스
스위스 나라는 없습니다.
인구 검색 >> 그만
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
import java.util.HashMap;
import java.util.Scanner;
//국가명은 중복되지 않을테니 key로 들어감.
class CountryMap {
// key value 형태
private HashMap<String, Integer> map;
public CountryMap() {
// HashMap객체생성
map = new HashMap<>();
}
public HashMap<String, Integer> getMap() {
System.out.println("나라 이름과 인구를 입력하세요.(예: Korea 5000)");
try {
Scanner sc = new Scanner(System.in);
int population = 0;
String country = "";
while (true) {
System.out.print("나라 이름, 인구 >> ");
country = sc.next();
if (country.equals("그만"))
break; // while문 빠져나오기
population = sc.nextInt();
map.put(country, population);
}
} catch (Exception e) {
System.out.print("잘못된 입력입니다. 다시 입력하세요.");
getMap(); // 자기자신을 다시 받아라
}
return map;
}
public void setMap(HashMap<String, Integer> map) {
this.map = map;
}
// 검색
public void search() {
try {
Scanner sc = new Scanner(System.in);
String key = "";
while (true) {
System.out.print("인구 검색 >> ");
key = sc.next();
if (key.equals("그만"))
break;
else if (!map.containsKey(key)) { // 해당 글자가 key안에 없으면
System.out.println(key + "라는 나라는 없습니다.");
continue;
}
System.out.println(key + " " + map.get(key));// 키값으로 내용 출력
}
} catch (Exception e) {
System.out.println("잘못된 입력입니다. 다시 입력하세요.");
search();
}
System.out.println("종료");
}
}
public class N2_Population {
public static void main(String[] args) {
// 객체 생성
CountryMap countryMap = new CountryMap();
countryMap.getMap();
countryMap.search();
}
}
|
cs |

3. 스택과 큐에 대하여 설명하시오.
1) Stack 스택
스택이란 박스에 객체를 집어 넣어서 쌓는 것
함수를 저장하고 호출하는 영역이 jvm에 있는데 이를 콜스택이라고 한다.
넣기: push, 꺼내기: pop
Array기반 Deque(디큐)는 양방향으로 꺼낼 수 있는 것으로
Queue의 한 방향으로만 꺼내는 FIFO를 보완했다.
Deque기준으로 Stack구현이 자바원칙이다.
대표: jvm 스택 메모리, deque
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.util.ArrayDeque;
import java.util.Deque;
public class StackDeque {
public static void main(String[] args) {
Deque<String> deq = new ArrayDeque<>();
//앞으로 넣고
deq.offerFirst("1.Box");
deq.offerFirst("2.Toy");
deq.offerFirst("3.Robot");
//앞으로 꺼내기
System.out.println(deq.pollFirst());
System.out.println(deq.pollFirst());
System.out.println(deq.pollFirst());
}
}
|
cs |

2) Queue 큐
넣은 순서대로 메시지가 처리된다.
대표: LinkedList, FIFO 먼저 넣은 데이터가 먼저 나감
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
|
import java.util.LinkedList;
import java.util.Queue;
public class QueueFIFO {
public static void main(String[] args) {
//LinkedList<E> 인스턴스 생성
Queue<String> que = new LinkedList<>();
que.offer("Box");
que.offer("Toy");
que.offer("Robot");
//무엇이 다음에 나올지 확인
System.out.println("next: " + que.peek());
//첫 번째, 두 번째 인스턴스 꺼내기
System.out.println(que.poll());
System.out.println(que.poll());
//무엇이 다음에 나올지 확인
System.out.println("next: " + que.peek());
//마지막 인스턴스 꺼내기
System.out.println(que.poll());
}
}
|
cs |

4. Map 에 대하여 설명하시오.
Map collection은 안드로이드에서 정말 많이 쓰인다.
Key - Value형식이며 식별자라고 이해하면 된다.
예를 들면 교실에서 선생님이 학생이름이 아니라 번호로 부르면 그게 식별자이다.
Map의 특징 중 하나는 key 중복이 되지 않는 것이다.
왜냐, key는 내부적으로 set에 의해 관리되며 그렇기에 map은 집합이 되어 순서유지가 되지 않는다.
set덩어리는 map.put()을 통해 가져온다.
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
|
packimport java.util.HashMap;
public class HashMapCollection {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
//Key-Value 기반 데이터 저장
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");
//데이터 탐색
System.out.println("23번: " + map.get(23));
System.out.println("37번: " + map.get(37));
System.out.println("45번: " + map.get(45));
System.out.println();
//데이터 삭제
map.remove(37);
//데이터 삭제 확인
System.out.println("37번: " +map.get(37));
}
}
|
cs |

1) HashMap
1
2
|
HashMap<Integer, String> map = new HashMap<>();
|
cs |
Key로 String타입을 사용하고 값으로 Integer타입을 사용
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
|
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class HashMapIteration {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");
//key만 담고 있는 컬렉션 인스턴스 생성
Set<Integer> ks = map.keySet();
//전체 Key출력 (for-each문 기반)
for(Integer n : ks)
System.out.print(n.toString() + '\t');
System.out.println();
//전체 Value출력 (for-each문 기반)
for(Integer n : ks)
System.out.print(map.get(n).toString() + '\t');
System.out.println();
//전체 Value 출력 (반복자 기반)
for(Iterator<Integer> itr = ks.iterator(); itr.hasNext();)
System.out.print(map.get(itr.next()) + '\t');
System.out.println();
}
}
|
cs |

2)TreeMap
1
2
|
TreeMap<Integer, String> map = new TreeMap<>();
|
cs |
Key기준으로 정렬된 순서 제공한다.
그래서 TreeMap이 HashMap보다 나음
Key로 String타입을 사용하고 값으로 Integer타입을 사용
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
|
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
public class TreeMapIteration {
public static void main(String[] args) {
TreeMap<Integer, String> map = new TreeMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");
// key만 담고 있는 컬렉션 인스턴스 생성
Set<Integer> ks = map.keySet();
// 전체 Key출력 (for-each문 기반)
for (Integer n : ks)
System.out.print(n.toString() + '\t');
System.out.println();
// 전체 Value출력 (for-each문 기반)
for (Integer n : ks)
System.out.print(map.get(n).toString() + '\t');
System.out.println();
// 전체 Value 출력 (반복자 기반)
for (Iterator<Integer> itr = ks.iterator(); itr.hasNext();)
System.out.print(map.get(itr.next()) + '\t');
System.out.println();
}
}
|
cs |

5.아래의 TreeMap의 전체 Value 값을 확인 하기 위한 소스를 짜시오.
TreeMap<Integer, String> map = new TreeMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");
6.아래의 IntegerComparator를 내림차순 정렬이 되게끔 구현하시오.
public static void main(String[] args) {
TreeSet<Integer> tr = new TreeSet<>(new IntegerComparator());
tr.add(30);
tr.add(10);
tr.add(20);
System.out.println(tr);
}
}
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
|
import java.util.Comparator;
import java.util.TreeSet;
class IntegerComparator implements Comparator<Integer>{
@Override
public int compare(Integer num1, Integer num2) {
return num2 - num1;
}
}
public class N6_IntegerCompar {
public static void main(String[] args) {
//고슬링 아재가 이미 만든건 comparator, 우리가 짠건 compareTo
TreeSet<Integer> tr = new TreeSet<>(new IntegerComparator());
tr.add(30);
tr.add(10);
tr.add(20);
System.out.println(tr);
}
}
|
cs |

'면접준비 > KOSMO 허쌤 숙제' 카테고리의 다른 글
학습정리-11-18 (0) | 2021.11.18 |
---|---|
학습정리-11-17 (0) | 2021.11.18 |
학습정리-11-09 (0) | 2021.11.09 |
학습정리-11-08 (0) | 2021.11.08 |
학습정리-11-05 (0) | 2021.11.06 |