owned this note
owned this note
Published
Linked with GitHub
## 과제_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;
}
}
```