java 24

산야(Sanya)·2024년 1월 30일

java 족보

목록 보기
26/28

1. 로또 프로그램을 작성하시오.(Set 으로)

import java.util.HashSet;
import java.util.Set;

public class Lotto {
    public static void main(String[] args) {
        Set<Integer> lottoNumbers = new HashSet<>();
        while (lottoNumbers.size() < 6) {
            int number = (int) (Math.random() * 45 + 1);
            lottoNumbers.add(number);
        }
        System.out.println(lottoNumbers);
    }
}

2. Set에 대하여 설명하시오.

  • Set은 자바의 컬렉션 프레임워크에 속한 인터페이스로, 중복된 요소를 저장하지 않는 특징을 가지고 있습니다. 즉, Set에 동일한 요소를 추가하려고 하면, 이전에 추가된 요소를 유지하고 새로운 요소는 추가되지 않습니다. 또한, Set은 순서를 유지하지 않으므로, 특정 위치에 있는 요소를 검색하거나 변경하는 것은 불가능합니다.

3. 아래의 출력이 나오도록 만드시오.

//문제

public class Test1 {

	public static void main(String[] args) {

		HashSet<Person> hSet = new HashSet<Person>();
		
		hSet.add(new Person("LEE", 10));
		hSet.add(new Person("LEE", 10));
		hSet.add(new Person("PARK", 35));
		hSet.add(new Person("PARK", 35));

		System.out.println("저장된 데이터 수: " + hSet.size());
		System.out.println(hSet);

	}

}
import java.util.HashSet;
import java.util.Set;

class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Person) {
            Person p = (Person) obj;
            return this.name.equals(p.name) && this.age == p.age;
        } else {
            return false;
        }
    }

    @Override
    public int hashCode() {
        return name.hashCode() + age;
    }

    @Override
    public String toString() {
        return name + "(" + age + "세)";
    }
}

public class Test1 {
    public static void main(String[] args) {
        Set<Person> hSet = new HashSet<>();
        hSet.add(new Person("LEE", 10));
        hSet.add(new Person("LEE", 10));
        hSet.add(new Person("PARK", 35));
        hSet.add(new Person("PARK", 35));

        System.out.println("저장된 데이터 수: " + hSet.size());
        System.out.println(hSet);
    }
}

/
저장된 데이터 수: 2
[LEE(10세), PARK(35세)]
/

4. 아래와 같이 출력이 나오도록 프로그래밍을 하시오.(개별진척도1번)

//문제

public class Test2 {
	public static void main(String[] args) {
		
        HashSet<Num> set = new HashSet<>();
        set.add(new Num(7799));
        set.add(new Num(9955));
        set.add(new Num(7799));

        System.out.println("인스턴스 수: " + set.size());

        for(Num n : set)
            System.out.print(n.toString() + '\t');

        System.out.println();
	}
}
import java.util.HashSet;
import java.util.Set;

class Num {
    int num;

    Num(int num) {
        this.num = num;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Num) {
            Num n = (Num) obj;
            return this.num == n.num;
        } else {
            return false;
        }
    }

    @Override
    public int hashCode() {
        return num;
    }

    @Override
    public String toString() {
        return String.valueOf(num);
    }
}

public class Test2 {
    public static void main(String[] args) {
        Set<Num> set = new HashSet<>();
        set.add(new Num(7799));
        set.add(new Num(9955));
        set.add(new Num(7799));

        System.out.println("인스턴스 수: " + set.size());

        for (Num n : set)
            System.out.print(n.toString() + '\t');

        System.out.println();
    }
}

/
====출력
인스턴스 수: 2
7799 9955
/

5.ThreeSet 과 HashSet 의 차이는?

  • HashSet: HashSet은 Set 인터페이스를 구현하는 클래스로, 중복된 요소를 저장하지 않는 특징을 가지고 있습니다. 또한, HashSet은 요소를 저장한 순서를 유지하지 않습니다.
  • TreeSet: TreeSet은 Set 인터페이스를 구현하는 클래스로, 중복된 요소를 저장하지 않습니다. TreeSet은 이진 탐색 트리의 형태로 데이터를 저장하며, 데이터를 자동으로 오름차순으로 정렬합니다.

6. Set 호출되는 원리와 순서를 설명하시오.

  • Set은 중복된 요소를 저장하지 않는 자료구조입니다. 이를 위해 Set은 먼저 요소의 hashCode() 메소드를 호출하여 해시 코드를 얻습니다. 그런 다음 저장된 요소들의 해시 코드와 비교합니다. 같은 해시 코드가 있다면 equals() 메소드를 사용하여 두 요소를 비교합니다equals() 메소드가 true를 반환하면 동일한 객체로 판단하고 중복 저장을 하지 않습니다.

7. 스택과 큐에 대하여 설명하시오.

  • 스택(Stack): 스택은 데이터가 입력된 순서대로 계속 쌓아 올리는 방법을 사용하고, 데이터를 사용할 때는 제일 위에 쌓인 데이터부터 순서대로 꺼내는 방식을 사용합니다. 이를 후입선출 (LIFO, Last In First Out) 방식이라고 합니다.
  • 큐(Queue): 큐는 스택과 반대로 데이터가 입력된 순서대로 일렬로 늘어 놓는 방법을 사용하고, 먼저 늘어 놓은 데이터부터 순서대로 꺼내는 방식을 사용합니다. 이를 선입선출 (FIFO, First In First Out) 방식이라고 합니다.

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

  • Map: Map은 키(Key)와 값(Value)의 쌍으로 이루어진 데이터 구조입니다. 각 키는 맵 내에서 유일해야 하며, 각 키는 특정 값을 가리킵니다. Java에서는 HashMap과 TreeMap과 같은 여러 Map 구현체를 제공합니다.

9.아래의 TreeMap의 전체 Value 값을 확인 하기 위한 소스를 짜시오. ​

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

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

for (String value : map.values()) {
    System.out.println(value);
}

10. 다음을 프로그래밍 하시오.

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

다음 해시맵을 이용하라.
-containsKey 라는 함수를 사용해 보셔도 좋습니다.

=================================================================================

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

나라 이름, 인구 >> Korea 5000
나라 이름, 인구 >> USA 1000000
나라 이름, 인구 >> Swiss 2000
나라 이름, 인구 >> France 3000
나라 이름, 인구 >> 그만

인구 검색 >> France
France의 인구는 3000
인구 검색 >> 스위스
스위스 나라는 없습니다.
인구 검색 >> 그만

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        HashMap<String, Integer> nations = new HashMap<>();

        System.out.println("나라 이름과 인구를 입력하세요.(예: Korea 5000)");
        while (true) {
            System.out.print("나라 이름, 인구 >> ");
            String nation = scanner.next();
            if (nation.equals("그만")) break;
            int population = scanner.nextInt();
            nations.put(nation, population);
        }

        while (true) {
            System.out.print("인구 검색 >> ");
            String search = scanner.next();
            if (search.equals("그만")) break;
            if (nations.containsKey(search)) {
                System.out.println(search + "의 인구는 " + nations.get(search));
            } else {
                System.out.println(search + " 나라는 없습니다.");
            }
        }
        scanner.close();
    }
}
profile
개발일지

0개의 댓글