## 과제_1 : 제네릭 리스트 구현 목표 : 제네릭을 사용하여 다양한 데이터 타입을 저장할 수 있는 배열 리스트와 연결 리스트를 구현한다. 요구사항 : 다음 코드를 참고하여, 제네릭을 사용하여 다양한 데이터 타입을 저장할 수 있는 배열 리스트와 연결 리스트를 구현한다. ```java public class MyArrayList { private int[] array; private int size; public MyArrayList() { array = new int[10]; size = 0; } public void add(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 get(int index) { return array[index]; } public int size() { return size; } public void remove(int index) { System.arraycopy(array, index + 1, array, index, size - index - 1); size--; } } ``` ```java public class MyLinkedList { public class Node { int data; Node next; public Node(int data) { this.data = data; } } private Node head; private int size; public void add(int value) { Node newNode = new Node(value); if (head == null) { head = newNode; } else { Node last = head; while (last.next != null) { last = last.next; } last.next = newNode; } size++; } public int get(int index) { Node node = head; for (int i = 0; i < index; i++) { node = node.next; } return node.data; } public int size() { return size; } public void remove(int index) { if (index == 0) { head = head.next; } else { Node node = head; for (int i = 0; i < index - 1; i++) { node = node.next; } node.next = node.next.next; } size--; } } ``` ## 과제_2 : WORDLE 게임 구현 목표 : 단어 맞추기 게임을 구현해본다. 요구사항 : 다음 조건을 만족하는 단어 맞추기 게임을 구현한다. 1. 프로그램은 5자리 단어 목록에서 무작위로 단어 하나를 선택해야 한다. - 단어 목록은 원하는 대로 설정한다. - ex) `SHAKE`, `SHARE`, `PANIC`, `AMUSE`, `SHADE`, ... 2. 사용자는 총 6번의 기회로 단어를 추측할 수 있다. 3. 각 추측 후, 프로그램은 다음과 같이 피드백을 제공해야 한다: - 정확한 위치에 있는 글자는 녹색 배경으로 표시한다. - 단어에 포함되나 위치가 틀린 글자는 노란색 배경으로 표시한다. - 단어에 포함되지 않은 글자는 아무런 색상 변화 없이 표시한다. - 색상 표현 방법은 ANSI 색상 코드를 사용한다. 4. 사용자가 정답을 맞히면, `Correct! You win!`을 출력하고 게임을 종료한다. 5. 6번의 시도 후에도 정답을 맞히지 못하면, `Wrong! The correct word is [정답].`을 출력하고 게임을 종료한다. 6. 입력받은 추측 단어는 대문자로 변환되어 처리해야 한다. ### ANSI 색상 코드 사용법 ANSI 색상 코드 : 터미널이나 콘솔에서 문자의 색상과 스타일을 제어하는 데 사용되는 특별한 코드 이 코드는 ANSI(Escape Sequence) 이스케이프 시퀀스라는 표준에 기반하여, 텍스트의 색상, 밝기, 스타일 등을 변경할 수 있다. ANSI 색상 코드란 텍스트 색상을 변경하기 위한 특수한 문자열이다. ANSI 색상 코드를 사용하여 Java 콘솔 응용 프로그램에서 텍스트 색상을 변경할 수 있다. | 색상 | 코드 | | --- | --- | | 녹색 | `\u001b[42m` | | 노란색 | `\u001b[43m` | | 리셋 | `\u001b[0m` | 배경을 `녹색` -> `노란색` -> `리셋`하는 예시 코드 ```java System.out.print("\u001b[42m" + "이 텍스트는 녹색 배경을 가지고 있다." + "\u001b[43m" + "이 텍스트는 노란색 배경을 가지고 있다." + "\u001b[0m" + "이 텍스트는 기본색상이다."); ``` > ANSI는 위의 내용보다 훨씬 더 많은 기능을 제공하므로, 더 많은 정보를 원한다면 구글링을 통해 찾아보자. --- ## 과제_1 : 제네릭 리스트 구현 모범답안 ```java public class MyArrayList<T> { private T[] array; private int size; public MyArrayList() { array = (T[]) new Object[10]; size = 0; } public void add(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 get(int index) { return array[index]; } public int size() { return size; } public void remove(int index) { System.arraycopy(array, index + 1, array, index, size - index - 1); size--; } } ``` ```java public class MyLinkedList<T> { public class Node { T data; Node next; public Node(T data) { this.data = data; } } private Node head; private int size; public void add(T value) { Node newNode = new Node(value); if (head == null) { head = newNode; } else { Node last = head; while (last.next != null) { last = last.next; } last.next = newNode; } size++; } public T get(int index) { Node node = head; for (int i = 0; i < index; i++) { node = node.next; } return node.data; } public int size() { return size; } public void remove(int index) { if (index == 0) { head = head.next; } else { Node node = head; for (int i = 0; i < index - 1; i++) { node = node.next; } node.next = node.next.next; } size--; } } ``` --- ## 과제_2 : WORDLE 게임 구현 모범 답안 ```java import java.util.Scanner; class Wordle { public static void main(String[] args) { final String BG_GREEN = "\u001b[42m"; final String BG_YELLOW = "\u001b[43m"; final String RESET = "\u001b[0m"; System.out.println("WORDLE!"); String[] words = {"SHAKE", "SHARE", "PANIC", "AMUSE", "SHADE"}; int wIndex = (int)(Math.random() * words.length); String correct = words[wIndex]; Scanner sc = new Scanner(System.in); String guess = ""; // Loop for six guesses for(int round=0;round<6;round++) { System.out.print("Please guess. > "); guess = sc.nextLine().toUpperCase(); // Create a loop to iterate through each letter for(int i=0;i<5;i++) { if(guess.substring(i, i+1).equals(correct.substring(i, i+1))) { // Letter matches System.out.print(BG_GREEN + guess.substring(i, i+1) + RESET); } else if(correct.indexOf(guess.substring(i, i+1)) > -1) { // Letter is in word, but different location System.out.print(BG_YELLOW + guess.substring(i, i+1) + RESET); } else { // Letter not in word System.out.print(guess.substring(i, i+1)); } } System.out.println(""); // If the guess is correct if(guess.equals(correct)) { System.out.println("Correct! You win!"); break; } } // Print correct answer if player loses if(!guess.equals(correct)) { System.out.println("Wrong! The correct word is " + correct + "."); } } } ```