티스토리 뷰

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
댓글