## 과제_1 : 제네릭 스택 구현 목표 : 제네릭을 사용하여 다양한 데이터 타입을 저장할 수 있는 스택을 구현한다. 요구사항 : 다음 코드를 참고하여, 제네릭을 사용하여 다양한 데이터 타입을 저장할 수 있는 스택을 구현한다. ```java public class MyStack { private int[] array; private int size; public MyStack() { array = new int[10]; size = 0; } public void push(int value) { if (size >= array.length) { int[] newArray = new int[array.length * 2]; System.arraycopy(array, 0, newArray, 0, array.length); array = newArray; } array[size++] = value; } public int pop() { return array[--size]; } public int peek() { return array[size - 1]; } public int size() { return size; } } ``` ## 과제_2 : Hangman 게임 만들기 1. **단어 선택**: 프로그램은 사전에 정의된 단어 목록에서 임의로 하나의 단어를 선택한다. 2. **단어 표시**: 선택된 단어의 길이를 플레이어에게 알리기 위해, 단어의 각 글자를 대신하는 밑줄을 표시한다 (예: 만약 단어가 `apple`이라면, `_ _ _ _ _`로 표시된다). 3. **시도 횟수 설정**: 플레이어는 단어를 맞추기 위해 총 10번의 시도 기회를 갖는다. 이는 행맨 그림을 그리는 대신, 플레이어가 추측을 잘못할 때마다 감소하는 시도 횟수로 표현된다. 4. **알파벳 추측**: 플레이어는 알파벳 하나를 추측한다. 이미 사용한 알파벳을 다시 입력하는 경우, 프로그램은 이를 무시하고 플레이어에게 다른 알파벳을 입력하라고 요청한다. 5. **추측 검증**: - 만약 추측한 알파벳이 단어에 포함되어 있다면, 해당 알파벳이 단어 내의 모든 해당 위치에 표시된다 (예: 단어가 `apple`이고, 플레이어가 `p`를 추측했다면, `_ p p _ _`로 표시된다). - 만약 추측한 알파벳이 단어에 없다면, 시도 횟수가 1 감소한다. 6. **게임 진행**: 플레이어가 단어를 정확히 맞추거나 시도 횟수가 0이 될 때까지 게임은 계속된다. 7. **게임 종료**: - **승리 조건**: 플레이어가 모든 알파벳을 정확히 맞추면 게임에서 승리한다. 이 경우, 프로그램은 플레이어의 승리를 선언하고 정답 단어를 보여준다. - **패배 조건**: 플레이어의 남은 시도 횟수가 0이 되면 게임에서 패배한다. 이 경우, 프로그램은 플레이어의 패배를 선언하고 정답 단어를 공개한다. --- ## 과제_1 : 제네릭 스택 구현 모범답안 ```java public class MyStack<T> { private T[] array; private int size; public MyStack() { array = (T[]) new Object[10]; size = 0; } public void push(T value) { if (size >= array.length) { T[] newArray = (T[]) new Object[array.length * 2]; System.arraycopy(array, 0, newArray, 0, array.length); array = newArray; } array[size++] = value; } public T pop() { return array[--size]; } public T peek() { return array[size - 1]; } public int size() { return size; } } ``` ## 과제_2 : Hangman 게임 만들기 모범답안 ```java import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; import java.util.Scanner; public class HangmanGame { private static final List<String> WORDS = Arrays.asList("apple", "banana", "orange", "pineapple", "strawberry"); private static final int MAX_ATTEMPTS = 10; public static void main(String[] args) { playGame(); } private static void playGame() { String word = selectRandomWord(); char[] guessedWord = new char[word.length()]; Arrays.fill(guessedWord, '_'); List<Character> guessedLetters = new ArrayList<>(); int attempts = MAX_ATTEMPTS; Scanner scanner = new Scanner(System.in); while (attempts > 0) { System.out.println("Word: " + new String(guessedWord)); System.out.println("Guessed letters: " + guessedLetters); System.out.println("Attempts left: " + attempts); System.out.print("Enter a letter: "); char letter = scanner.nextLine().toLowerCase().charAt(0); if (guessedLetters.contains(letter)) { System.out.println("You already guessed that letter. Try again."); continue; } guessedLetters.add(letter); if (checkLetter(word, letter, guessedWord)) { if (isWordGuessed(guessedWord)) { System.out.println("Congratulations! You guessed the word: " + word); break; } } else { attempts--; } } if (attempts == 0) { System.out.println("Sorry, you ran out of attempts. The word was: " + word); } } private static String selectRandomWord() { Random random = new Random(); int index = random.nextInt(WORDS.size()); return WORDS.get(index); } private static boolean checkLetter(String word, char letter, char[] guessedWord) { boolean letterFound = false; for (int i = 0; i < word.length(); i++) { if (word.charAt(i) == letter) { guessedWord[i] = letter; letterFound = true; } } return letterFound; } private static boolean isWordGuessed(char[] guessedWord) { for (char c : guessedWord) { if (c == '_') { return false; } } return true; } } ```