1. “그만”이 입력될 때까지 나라 이름과 인구를 입력받아 저장하고, 다시 나라 이름을 입력받아 인구를 출력하는 프로그램을 작성하라. 다음 해시맵을 이용하라.

나라 이름과 인구를 입력하세요.(예: Korea 5000)

나라 이름, 인구 >> Korea 5000

나라 이름, 인구 >> USA 1000000

나라 이름, 인구 >> Swiss 2000

나라 이름, 인구 >> France 3000

나라 이름, 인구 >> 그만

인구 검색 >> France

France의 인구는 3000

인구 검색 >> 스위스

스위스 나라는 없습니다.​

 

1-1. 메인 클래스

import java.util.HashMap;
import java.util.NoSuchElementException;
import java.util.Scanner;

public class Population {
	public static void main(String[] args) {
		Scanner scanner =  new Scanner(System.in);
		
		HashMap<String, Integer> map =
				new HashMap<>();
		
		System.out.println("나라 이름과 인구를 입력하세요.");
		System.out.println("ex) Korea 5000");
		
		try {
			while (true) {
				System.out.print("나라 이름, 인구 >> ");
				String str = scanner.nextLine();
				
				if (str.equals("그만"))
					break;
				String[] temp = str.split(" ");

				String cntry = temp[0]; 
				Integer pop = Integer.parseInt(temp[1]);
				map.put(cntry, pop);
			}
			
			while (true) {
				System.out.print("인구 검색 >> ");
				String cntry = scanner.next();
				
				if (cntry.equals("그만"))
					break;	
				Integer result = map.get(cntry);
				
				if (result == null)
					System.out.println(cntry + " 나라는 없습니다.");
				else
					System.out.println(cntry + "의 인구는 " + result);
			}
		} catch (NoSuchElementException e) {
			System.out.println("잘못된 입력 값 입니다.");
			System.out.println("쉼표 및 띄어쓰기를 누락하지 않으셨는지 다시 확인 후 입력해주세요.");
		}
		
		scanner.close();
	}
}

 

 

2. 하나의 학생 정보를 나타내는 Student 클래스에는 이름, 학과, 학번, 학점 평균을 저장하는 필드가 있다.

(1) 학생마다 Student 객체를 생성하고 4명의 학생 정보를 ArrayList< Student > 컬렉션에 저장한 후에, ArrayList< Student >의 모든 학생(4명) 정보를 출력하고 학생 이름을 입력받아 해당 학생의 학점 평균을 출력하는 프로그램을 작성하라.


학생 이름, 학과, 학번, 학점평균 입력하세요.

>> 황기태, 모바일, 1, 4.1

>> 이재문, 안드로이드, 2, 3.9

>> 김남윤, 웹공학, 3, 3.5

>> 최찬미, 빅데이터, 4, 4.25

----------------------------------

이름: 황기태

학과: 모바일

학번: 1

학점평균: 4.1

----------------------------------

이름: 이재문

학과: 안드로이드

학번: 2

학점평균: 3.9

----------------------------------

이름: 김남윤

학과: 웹공학

학번: 3

학점평균: 3.5

----------------------------------

이름: 최찬미

학과: 빅데이터

학번: 4

학점평균: 4.25

----------------------------------

학생 이름 >> 최찬미

최찬미, 빅데이터, 4, 4.25

학생 이름 >> 이재문

이재문, 안드로이드, 2, 3.9

학생 이름 >> 그만​

 

2-1. 메인 클래스

import java.util.ArrayList;
import java.util.NoSuchElementException;
import java.util.Scanner;

public class StudentGradeMain {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		ArrayList<Student> list = new ArrayList<>();
		Student[] student = new Student[4];
		
		System.out.println("학생 이름, 학과, 학번, 학점평균을 입력하세요.");
		System.out.println("ex) 황기태, 모바일, 1, 4.1");
		
		try {
			for (int i = 0; i < student.length; i++) {
				System.out.print(">> ");
				String str = scanner.nextLine();
				String[] temp = str.split(", ");
				
				String name = temp[0];
				String dept = temp[1];
				int classNum = Integer.parseInt(temp[2]);
				double grdAvg = Double.parseDouble(temp[3]);
				
				student[i] = new Student(name, dept, classNum, grdAvg);
				list.add(student[i]);
			}
			System.out.println("----------------------------------");
			
			for (int i = 0; i < student.length; i++) {
				System.out.println(list.get(i));
				System.out.println("----------------------------------");
			}
			
			while (true) {
				System.out.print("학생 이름 >> ");
				String name = scanner.next();		
				
				if (name.equals("그만")) 
					break;
				
				Student findStudent = new Student();
				for (Student s : list) {
					if (name.equals(s.getName())) {
						findStudent = s;
					}
				}
				
				System.out.println(findStudent.getName() + ", "
						+ findStudent.getDept() + ", "
						+ findStudent.getClassNum() + ", "
						+ findStudent.getGrdAvg());
			}
		} catch (NoSuchElementException e) {
			System.out.println("잘못된 입력 값 입니다.");
			System.out.println("쉼표 및 띄어쓰기를 누락하지 않으셨는지 다시 확인 후 입력해주세요.");
		}
		
		scanner.close();
	}
}

 

2-2. Student 클래스

public class Student {
	private String name;
	private String dept;
	private int classNum;
	private double grdAvg;
	
	public Student() {}
	
	public Student(String name, String dept,
			int classNum, double grdAvg) {
		this.name = name;
		this.dept = dept;
		this.classNum = classNum;
		this.grdAvg = grdAvg;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getDept() {
		return dept;
	}

	public void setDept(String dept) {
		this.dept = dept;
	}

	public int getClassNum() {
		return classNum;
	}

	public void setClassNum(int classNum) {
		this.classNum = classNum;
	}

	public double getGrdAvg() {
		return grdAvg;
	}

	public void setGrdAvg(double grdAvg) {
		this.grdAvg = grdAvg;
	}

	@Override
	public String toString() {
		return "이름: " + name + "\n"
				+ "학과: " + dept + "\n"
				+ "학번: " + classNum + "\n"
				+ "학점평균: " + grdAvg;
	}
}

 

 

3. ArrayList< Student > 대신, HashMap<String, Studnet> 해시맵을 이용하여 다시 작성하라. 해시맵에서 키는 학생 이름으로 한다.

3-1. 메인 클래스

import java.util.HashMap;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.Set;

public class StudentGradeMain02 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		HashMap<String, Student> map =
				new HashMap<>();
		Student[] student = new Student[4];
		
		System.out.println("학생 이름, 학과, 학번, 학점평균을 입력하세요.");
		System.out.println("ex) 황기태, 모바일, 1, 4.1");
		
		try {
			for (int i = 0; i < student.length; i++) {
				System.out.print(">> ");
				String str = scanner.nextLine();
				String[] temp = str.split(", ");
				
				String name = temp[0];
				String dept = temp[1];
				int classNum = Integer.parseInt(temp[2]);
				double grdAvg = Double.parseDouble(temp[3]);
				
				student[i] = new Student(name, dept, classNum, grdAvg);
				map.put(name, student[i]);
			}
			Set<String> key = map.keySet();
			Iterator<String> itr = key.iterator();
			System.out.println("----------------------------------");
			
			while(itr.hasNext()) {
				String name = itr.next();
				Student s = map.get(name);
				System.out.println(s);
			}
			System.out.println("----------------------------------");
			
			while(true) {
				System.out.print("학생 이름 >> ");
				String name = scanner.next();
				
				if(name.equals("그만"))
					break;
				
				Student s = map.get(name);
				
				if(s == null)
					System.out.println(name + "님의 정보는 없습니다.");
				else
					System.out.println(s.getName() + " "
							+ s.getDept() + " "
							+ s.getClassNum() + " "
							+ s.getGrdAvg());
			}
		} catch (NoSuchElementException e) {
			System.out.println("잘못된 입력 값 입니다.");
			System.out.println("쉼표 및 띄어쓰기를 누락하지 않으셨는지 다시 확인 후 입력해주세요.");
		}
		
		scanner.close();
	}
}

 

3-2. Student 클래스

public class Student {
	private String name;
	private String dept;
	private int classNum;
	private double grdAvg;
	
	public Student() {}
	
	public Student(String name, String dept,
			int classNum, double grdAvg) {
		this.name = name;
		this.dept = dept;
		this.classNum = classNum;
		this.grdAvg = grdAvg;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getDept() {
		return dept;
	}

	public void setDept(String dept) {
		this.dept = dept;
	}

	public int getClassNum() {
		return classNum;
	}

	public void setClassNum(int classNum) {
		this.classNum = classNum;
	}

	public double getGrdAvg() {
		return grdAvg;
	}

	public void setGrdAvg(double grdAvg) {
		this.grdAvg = grdAvg;
	}

	@Override
	public String toString() {
		return "이름: " + name + "\n"
				+ "학과: " + dept + "\n"
				+ "학번: " + classNum + "\n"
				+ "학점평균: " + grdAvg + "\n"
				+ "----------------------------------";
	}
}

 

 

4. 도시 이름, 위도, 경도 정보를 가진 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

도시 이름 >> 그만​

 

4-1. 메인 클래스

import java.util.HashMap;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;

public class LocationMain {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Location[] location = new Location[4];
		HashMap<String, Location> map 
			= new HashMap<String, Location>();
		
		System.out.println("도시, 경도, 위도를 입력하세요.");
		System.out.println("ex) 서울, 37, 126");
		
		try {
			for(int i=0; i<location.length; i++) {
				System.out.print(">> ");
				String text = sc.nextLine();
				StringTokenizer st = new StringTokenizer(text, ",");
				String city = st.nextToken().trim();
				int longitude = Integer.parseInt(st.nextToken().trim());
				int latitude = Integer.parseInt(st.nextToken().trim());
				location[i] = new Location(city, longitude, latitude);
				map.put(city, location[i]);
			}
			Set<String> key = map.keySet();
			Iterator<String> it = key.iterator();
			System.out.println("----------------------------------");
			
			while(it.hasNext()) {
				String city = it.next();
				Location s = map.get(city);
				System.out.println(s.getCity() + " "
						+ s.getLongitude() + " "
						+ s.getLatitude());
			}
			System.out.println("----------------------------------");
			
			while(true) {
				System.out.print("도시 이름 >> ");
				String city = sc.next();
				
				if(city.equals("그만"))
					break;
				
				Location s = map.get(city);
				
				if(s == null)
					System.out.println(city + "는 없습니다.");
				else
					System.out.println(s.getCity() + " "
							+ s.getLongitude() + " "
							+ s.getLatitude());
			}
		} catch (NoSuchElementException e) {
			System.out.println("잘못된 입력 값 입니다.");
			System.out.println("쉼표 및 띄어쓰기를 누락하지 않으셨는지 다시 확인 후 입력해주세요.");
		}
		
		sc.close();
	}
}

 

4-2. Location 클래스

public class Location {
	private String city; // 도시이름
	private int longitude; // 경도
	private int latitude; // 위도
	
	public Location(String city, int longitude, int latitude) {
		this.city = city;
		this.longitude = longitude;
		this.latitude = latitude;
	}
	
	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	public int getLongitude() {
		return longitude;
	}

	public void setLongitude(int longitude) {
		this.longitude = longitude;
	}

	public int getLatitude() {
		return latitude;
	}

	public void setLatitude(int latitude) {
		this.latitude = latitude;
	}
}

 

 

5. 이름과 학점(4.5만점)을 5개 입력받아 해시맵에 저장하고, 장학생 선발 기준을 입력 받아 장학생 명단을 출력하라.

미래장학금관리시스템입니다.

이름과 학점 >> 적당히 3.1

이름과 학점 >> 나탈락 2.4

이름과 학점 >> 최고조 4.3

이름과 학점 >> 상당히 3.9

이름과 학점 >> 고득점 4.0

장학생 선발 학점 기준 입력 >> 3.2

장학생 명단 : 최고조 상당히 고득점 ​

[Hint] HashMap의 전체 요소를 검색하여 학점이 3.2 이상인 학생을 알아내야 한다.

 

5-1. 메인 클래스

import java.util.HashMap;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.Set;

public class ScholarshipMain {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		HashMap<String, Double> map = new HashMap<>();
		
		System.out.println("미래장학금 관리시스템입니다.");
		System.out.println("이름과 학점을 띄어써서 입력해주세요.");
		System.out.println("ex) 홍길동 3.5");
		
		try {
			for (int i = 1; i <= 5; i++) {
				System.out.print("이름과 학점 >> ");
				
				String str = scanner.nextLine();
				String[] temp = str.split(" ");
				
				String name = temp[0];
				Double grade = Double.parseDouble(temp[1]);
				map.put(name, grade);
			}
			System.out.println();
			
			System.out.print("장학생 선발 학점 기준 입력 >> ");
			Double criteria = scanner.nextDouble();
			
			System.out.print("장학생 명단 : ");
			Set<String> nameSet = map.keySet();
			Iterator<String> it = nameSet.iterator();
			while(it.hasNext()) {
				String name = it.next();
				double score = map.get(name);
				if(score > criteria)
					System.out.print(name+ " ");
			}
		} catch (NoSuchElementException e) {
			System.out.println("잘못된 입력 값 입니다.");
			System.out.println("띄어쓰기를 누락하지 않으셨는지 다시 확인 후 입력해주세요.");
		}
		
		scanner.close();
	}
}

 

 

6. 큐와 스택에 대하여 설명하시오.

6-1. 큐(Queue)

: 데이터가 오고감에 있어 선입 선출(First In First Out)의 형태를 가지는 자료구조이다.

이때, 데이터가 들어오는 것을 오퍼(Offer), 나가는 것을 폴(Poll)이라 한다.

 

6-2. 스택(Stack)

: 데이터가 오고감에 있어 후입 선출(Last In First Out)의 형태를 가지는 자료구조이다.

이때, 데이터가 들어오는 것을 푸시(Push), 나가는 것을 팝(Pop)이라 한다.

 

 

7. Map 에 대하여 설명하시오.

: Key와 Value의 형태로 이루어진 컬렉션 프레임워크 중 하나로 중복성을 가지지 않는 Key의 특성을 이용 해당되는 Value 값을 다룰 수 있는 특징을 가진다.

 

 

8. 아래의 TreeMap의 Value를 확인 하기 위한 소스를 짜시오.

TreeMap<Integer, String> map = new TreeMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");

 

8-1. 메인 클래스

import java.util.Set;
import java.util.TreeMap;

public class TreeMapMain {

	public static void main(String[] args) {
		TreeMap<Integer, String> map = new TreeMap<>();
		
		map.put(45, "Brown");
		map.put(37, "James");
		map.put(23, "Martin");
		
		Set<Integer> ks = map.keySet();
		
		for (Integer n : ks) {
			System.out.print(map.get(n).toString() + '\t');
		}
		System.out.println();
	}
}

 

 

9. 아래의 IntegerComparator를 내림차순 정렬이 되게끔 구현하시오.

class ComparatorIntegerDemo {
	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);	
	}
}

 

9-1. IntegerComparator 클래스

import java.util.Comparator;

public class IntegerComparator implements Comparator<Integer> {
	@Override
	public int compare(Integer n1, Integer n2) {
		if (n1 - n2 > 0) {
			return -1;
		} else if (n1 - n2 < 0) {
			return 1;
		} else {
			return 0;
		}
	}
}

 

 

10. Objects.hash의 용도와 사용법은?

: 파라미터에 주어진 값을 이용해서 해시 코드를 생성하는 역할로 매개값들로 배열을 생성하고 hashCode() 메소드를 호출해서 해당 값을 리턴한다.

@Override

public int hashCode() {
	return Objects.hash(field1, field2, field3);
}
import java.util.Objects;

public class HashCodeExample {

	public static void main(String[] args) {
		Student s1 = new Student(1, "홍길동");
		Student s2 = new Student(1, "홍길동");
		System.out.println(s1.hashCode());
		System.out.println(Objects.hashCode(s2));
	}


static class Student {
int sno;
String name;

	Student(int sno, String name) {
		this.sno = sno;
		this.name = name;
	}

	@Override
	public int hashCode() { // hashCode 호출
		return Objects.hash(sno, name); // Objects.hash 메소드를 적용하여 객체의 해시코드를 리턴
	}
}

'WebDev > 본과정' 카테고리의 다른 글

마크업 언어와 서블릿의 출력  (0) 2021.05.14
JSP 개요  (0) 2021.05.14
List와 Set  (0) 2021.05.13
Generic 심화 및 컬렉션 프레임워크 개요  (0) 2021.05.13
Java의 기본 클래스 및 제네릭 개요  (0) 2021.05.13