### 주제 + 자바 프로그래밍 문제풀이반 ### 목표 + 실질적인 프로그래밍 능력 향상 ### 커리큘럼 + 연습문제 01 + 연습문제 02 + ... ### 대상 + 자바에 대한 기초 개념을 숙지한 자. + 실질적 프로그래밍 능력 향상을 원하는 자. ### 시간 및 장소 + 협의 ### 비용 + 협의 ### 연락처 + 카톡: chaesam + 메일: [email protected]
### 문제 정수 N (0~1,000)을 표현하는 각 자리의 숫자들의 합을 구하는 프로그램을 작성하세요. [예] 932 정수의 각 자리 숫자들의 합계는 9+3+2=14 입니다. ### 입력 예 ``` 474 ``` ### 출력 예 ``` 15 ``` ### 힌트 `%`연산자와 `/`연산자를 활용하세요. ``` 932 % 10 = 2 932 / 10 = 93 ```
### 문제 A, E, I, O, U를 모음이라고 가정했을때, 입력으로 들어온 문자열이 몇개의 모음과 자음으로 구성되어 있는지 출력하는 프로그램을 작성하세요. ### 입력 예 ``` 2 Programming is fun Hello World ``` ### 출력 예 ``` Programming is fun: 5 11 Hello World: 3 7 ``` ### 힌트 `Scanner` 클래스를 사용하여 키보드로부터 입력을 받아주세요. ``` Scanner input = new Scanner(System.in); int n = input.nextInt(); // 정수값 입력 String str = input.next(); // 문자열 입력 ``` `for`문과 `switch` 구문을 사용하여 모음과 자음의 개수를 세어주세요 ``` for (int i = 0; i < str.length(); i++) { switch (str.charAt(i)) { case 'a': case 'e': ... break; default: ... break; } } ```
### 문제 요일별 직원들의 작업시간이 아래와 같이 정리되어있다. 매 행에는 직원의 일주일 작업시간이 열로 구분되어 있다. 예를 들어, 8명의 직원의 작업시간은 다음 그림처럼 저장된다. 여러분은 각 직원의 작업시간을 입력 받아서 한 주 동안 가장 많이 일한 직원부터 내림차순으로 출력하는 프로그램을 작성해야 한다. ![working hours][1] ### 요구사항 다음과 같은 형식의 클래스를 만들어서 문제를 풀어주세요. ``` class Employee { String name; int[] hours; Employee(String name, int[] hours) { this.name = name; this.hours = hours; } int totalHours() { ... } } ``` ### 입력 예 ``` 8 Employee0 2 4 3 4 5 8 8 Employee1 7 3 4 3 3 4 4 Employee2 3 3 4 3 3 2 2 Employee3 9 3 4 7 3 4 1 Employee4 3 5 4 3 6 3 8 Employee5 3 4 4 6 3 4 4 Employee6 3 7 4 8 3 8 4 Employee7 6 3 5 9 2 7 9 ``` ### 출력 예 ``` Employee7 41 Employee6 37 Employee0 34 Employee4 32 Employee3 31 Employee1 28 Employee5 28 Employee2 20 ``` [1]: https://withcs.net/img/java2015/weekly_hours_for_each_employee.png "직원별 일한시간"
### 문제 블랙잭 게임이 동작 할 수 있도록 Player.java 소스코드를 작성해주세요. ### 블랙잭 규칙 + 참가자는 딜러와 게이머 2명으로 제한 + 카드는 각 무늬(다이아, 클로버, 하트, 스페이스) 별로 13장(A, 2~10, J,Q,K)씩 총 52장 + 숫자 카드는 그대로 점수에 사용 + 문자 카드 점수는 아래와 같이 적용 - A: 1점 - J,Q,K: 10점 + 게임 시작시, 참가자는 2장을 받고 시작 + 게이머는 언제든지 카드를 뽑을 수 있음 + 딜러의 점수가 - 16점 이하인 경우 반드시 1장을 뽑고 - 17점 이상인 경우 더이상 카드를 뽑지 않는다 + 참가자 모두 추가 뽑기 없는경우 카드를 오픈하며, 오픈시 총점이 21점에 가까운 측이 승리 + 단, 21점을 초과한 사람은 패배 ### 핵심 객체 + 카드 뭉치 - 52개의 서로 다른 카드를 갖음 - 카드를 1장을 뽑아준다 + 카드 - 다이아, 클로버, 하트, 스페이드 중 하나의 무늬를 갖음 - A, 2~10, J, Q, K 중 하나를 갖음 + 규칙 - 점수를 측정한다 - 승패를 판단한다 + 딜러 - 게임 시작시 2장의 카드를 받음 - 추가로 카드를 받음(16점 이하인경우) - 뽑은 카드를 갖음 - 카드를 오픈 + 게이머 - 게임 시작시 2장의 카드를 받음 - 추가로 카드를 받음 - 뽑은 카드를 갖음 - 카드를 오픈 ### 소스코드 구성 + BlackJack.java + Rule.java + Player.java + Deck.java + Card.java ### BlackJack.java ```java import java.util.Scanner; public class BlackJack { public static void main(String[] args) { System.out.println("== 블랙잭 =="); Scanner input = new Scanner(System.in); Player dealer = new Player(); // 딜러 생성 Player gamer = new Player(); // 게이머 생성 Deck deck = new Deck(); // 덱 생성 init(deck, dealer, gamer); // 첫 카드 돌림 while (!(dealer.isStay() && gamer.isStay())) { // 게임 진행 playing(input, deck, dealer, gamer); } Rule.judge(dealer, gamer); // 최종결과 판단 } public static void init(Deck deck, Player dealer, Player gamer) { System.out.println("게이머가 2장의 카드를 받습니다."); gamer.hit(deck.pick()); gamer.hit(deck.pick()); System.out.println("딜러가 2장의 카드를 받습니다."); dealer.hit(deck.pick()); dealer.hit(deck.pick()); System.out.println("게이머의 카드는 다음과 같습니다."); gamer.showCards(); System.out.println("딜러의 카드는 다음과 같습니다."); dealer.showCards(); } public static void playing(Scanner input, Deck deck, Player dealer, Player gamer) { System.out.println("카드를 더 받으려면 1 아니면 0을 입력: "); int choice = input.nextInt(); if (choice == 1) gamer.hit(deck.pick()); else gamer.stay(); if (Rule.getScore(dealer.getCards()) < 17) dealer.hit(deck.pick()); else dealer.stay(); System.out.println("게이머의 카드는 다음과 같습니다."); gamer.showCards(); System.out.println("딜러의 카드는 다음과 같습니다."); dealer.showCards(); } } ``` ### Deck.java ``` import java.util.LinkedList; import java.util.List; public class Deck { private List<Card> cards; Deck() { this.cards = generateCards(); } private List<Card> generateCards() { LinkedList<Card> cards = new LinkedList<>(); for (Pattern p : Pattern.values()) { for (int i = 1; i <= 13; i++) { Card c = new Card(p, i); cards.add(c); } } return cards; } public Card pick() { int randomIndex = (int) (Math.random() * cards.size()); return cards.remove(randomIndex); } } ``` ### Card.java ``` public class Card { private Pattern pattern; private String denomination; private int point; Card(Pattern pattern, int index) { this.pattern = pattern; this.denomination = getDenomination(index); this.point = getPoint(index); } private int getPoint(int index) { switch (index) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: return index; case 11: case 12: case 13: return 10; default: return 0; } } private String getDenomination(int index) { switch (index) { case 1: return "A"; case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: return "" + index; case 11: return "J"; case 12: return "Q"; case 13: return "K"; default: return "ERROR: wrong denomination in Card"; } } @Override public String toString() { return "Card [pattern=" + pattern + ", denomination=" + denomination + ", point=" + point + "]"; } public int getPoint() { return this.point; } } enum Pattern { DIAMOND, CLUB, HEART, SPADE; } ``` ### Rule.java ``` import java.util.List; public class Rule { public static int getScore(List<Card> cards) { int score = 0; for (Card c : cards) { score += c.getPoint(); } return score; } public static void judge(Player dealer, Player gamer) { int dealerScore = getScore(dealer.getCards()); int gamerScore = getScore(gamer.getCards()); if (dealerScore > 21) { if (gamerScore > 21) System.out.println("무승부!"); else System.out.println("게이머 승!"); } else { if (gamerScore > 21) System.out.println("딜러 승!"); else if (gamerScore > dealerScore) System.out.println("게이머 승!"); else if (gamerScore == dealerScore) System.out.println("무승부!"); else System.out.println("딜러 승!"); } System.out.printf("\t딜러(%d) : 게이머(%d)\n", dealerScore, gamerScore); } } ``` ### Player.java ``` public class Player { enum Status { STAY, HIT } private List<Card> cards; private Status status; Player() { this.cards = new LinkedList<Card>(); this.status = Status.HIT; } ... } ```
### 문제 로또 번호 생성기를 만들어 주세요 ### 요구사항 + 중복 숫자가 없도록 할 것. + 싫어하는 숫자를 제외하고 번호를 생성할 것. ### 입력 예 ``` 제거할 숫자들: 13 42 7 33 28 ``` ### 출력 예 ``` 생성 번호: 31 6 19 3 23 36 ```
## 북 카페 객체 지향 프로그래밍(OOP) 수업을 마치고 집으로 돌아온 나컴공(21) 학생.'도대체 객체 지향이 뭐지?' 라는 의문에 휩싸이지만, 오늘도 어김없이 북 카페로 공부를 하러 간다. 그렇게 3시간이 흘렀을까? 마침내 깨달음에 이른 나컴공 학생! > 객체지향 프로그래밍은, > 실제 사물의 구성형태를 그대로 프로그램에 녹여내는 것이였어! ### 문제 1. 북 카페를 이루고있는 구성요소를 클래스로 설계하세요. 2. 설계를 토대로 소스코드를 작성하세요. 3. 작성된 소스코드가 요구사항을 충족하도록 프로그램을 만들어 주세요. ### 구성요소 + 북 카페 + 책 + 음료 ### 요구사항 북 카페는 아래의 정보를 갖는다. + 이름 + 주소 + 여러권의 책 + 다양한 음료 북 카페는 아래의 동작을 수행 할 수 있다. + 새로운 책을 등록하거나, 등록된 책을 삭제 + 새로운 음료를 추가하거나, 기존 음료를 삭제 + 카페의 정보를 요약하여 출력 책은 아래의 정보를 갖는다. + 제목 책은 아래의 동작을 수행 할 수 있다. + 책 제목을 문자열로 반환 음료는 아래의 정보를 갖는다. + 이름 + 가격 음료는 아래의 동작을 수행 할 수 있다. + 음료 정보를 문자열로 반환 ### 기본코드 **Book.java** ``` public class Book { // 필드 String title; // 생성자 Book(String title) { this.title = title; } // 책 정보를 문자열로 반환 String getTitle() { return title; } } ``` **Drink.java** ``` public class Drink { // 필드 String name; int price; // 생성자 public Drink(String name, int price) { /* 생성자를 완성시켜 주세요 */ } // 필요 메소드를 추가해주세요 } ``` **BookCafe.java** ``` public class BookCafe { // 필드 String name; String address; Book[] books; Drink[] drinks; int booksCnt; int drinksCnt; static int MAX = 10; // 생성자 BookCafe(String cafeName, String cafeAddress) { name = cafeName; address = cafeAddress; books = new Book[MAX]; booksCnt = 0; drinks = new Drink[MAX]; drinksCnt = 0; } // 새 책을 등록 void addBook(Book book) { books[booksCnt] = book; booksCnt = booksCnt + 1; } // 기존 책을 삭제 void removeBook(String title) { // 반복문을 통해 책을 찾음! for (int i = 0; i < MAX; i++) { Book target = books[i]; // 대상 책이 존재하고, if (target != null) { // 그 책의 이름이 삭제할 이름과 같다면, if (target.getTitle() == title) { books[i] = null; // 책을 삭제 } } } } // 새 음료를 추가 void addDrink(Drink drink) { /* 메소드를 구현하세요 */ } // 기존 음료 삭제 void removeDrink(String name) { /* 메소드를 구현하세요 */ } // 카페 정보를 출력 void showCafeInfo() { System.out.println("이름: " + name); System.out.println("주소: " + address); System.out.println("보유 서적:"); for (int i = 0; i < MAX; i++) { Book target = books[i]; // 대상이 되는 책이 있다면, if (target != null) { System.out.println("\t" + target.getTitle()); } } System.out.println("판매 음료:"); System.out.println("\t" + "/* 음료 목록이 출력되도록 코드를 작성해주세요 */"); /* 음료 목록이 출력되도록 코드를 작성해주세요 */ } public static void main(String[] args) { // 북카페 생성! BookCafe itCafe = new BookCafe("IT 카페", "신림역 3번출구"); // 신규 책 등록 Book java = new Book("예제로 배우는 Java"); itCafe.addBook(java); Book html = new Book("HTML 웹페이지 만들기"); itCafe.addBook(html); Book slamDunk = new Book("슬램덩크"); itCafe.addBook(slamDunk); Book dataStructure = new Book("자료구조"); itCafe.addBook(dataStructure); // 신규 음료 등록 Drink americano = new Drink("아메리카노", 2000); itCafe.addDrink(americano); Drink latte = new Drink("라떼", 2500); itCafe.addDrink(latte); Drink lemonAde = new Drink("레몬에이드", 3000); itCafe.addDrink(lemonAde); Drink beer = new Drink("캔맥주", 3000); itCafe.addDrink(beer); // 카페 정보 출력 System.out.println("== 카페 정보 =="); itCafe.showCafeInfo(); // 책 삭제 System.out.println("\n== 책 삭제 =="); itCafe.removeBook("슬램덩크"); // 카페 정보 출력 System.out.println("\n== 카페 정보 =="); itCafe.showCafeInfo(); // 캔맥주 삭제 System.out.println("\n== 캔맥주 삭제 =="); itCafe.removeDrink("캔맥주"); // 카페 정보 출력 System.out.println("\n== 카페 정보 =="); itCafe.showCafeInfo(); } } ``` ### 기본코드 실행결과 ``` == 카페 정보 == 이름: IT 카페 주소: 신림역 3번출구 보유 서적: 예제로 배우는 Java HTML 웹페이지 만들기 슬램덩크 자료구조 판매 음료: /* 음료 목록이 출력되도록 코드를 작성해주세요 */ == 책 삭제 == == 카페 정보 == 이름: IT 카페 주소: 신림역 3번출구 보유 서적: 예제로 배우는 Java HTML 웹페이지 만들기 자료구조 판매 음료: /* 음료 목록이 출력되도록 코드를 작성해주세요 */ == 캔맥주 삭제 == == 카페 정보 == 이름: IT 카페 주소: 신림역 3번출구 보유 서적: 예제로 배우는 Java HTML 웹페이지 만들기 자료구조 판매 음료: /* 음료 목록이 출력되도록 코드를 작성해주세요 */ ``` ### 최종코드 실행목표 ``` == 카페 정보 == 이름: IT 카페 주소: 신림역 3번출구 보유 서적: 예제로 배우는 Java HTML 웹페이지 만들기 슬램덩크 자료구조 판매 음료: 아메리카노 - 2000원 라떼 - 2500원 레몬에이드 - 3000원 캔맥주 - 3500원 == 책 삭제 == == 카페 정보 == 이름: IT 카페 주소: 신림역 3번출구 보유 서적: 예제로 배우는 Java HTML 웹페이지 만들기 자료구조 판매 음료: 아메리카노 - 2000원 라떼 - 2500원 레몬에이드 - 3000원 캔맥주 - 3500원 == 캔맥주 삭제 == == 카페 정보 == 이름: IT 카페 주소: 신림역 3번출구 보유 서적: 예제로 배우는 Java HTML 웹페이지 만들기 자료구조 판매 음료: 아메리카노 - 2000원 라떼 - 2500원 레몬에이드 - 3000원 ```
## 격투 게임 평소 알피지 게임을 좋아하던 박컴돌(21) 학생. 어느날 무자비한 PK를 당하고 만다. 아무리 싸워도 이길 수 없음을 깨닫고, 결국 게임을 접고야 만다. > "아오 빡쳐.. 내가 게임을 만들면, 아무도 날 못이기겠지..?" ### 문제 격투 게임을 만들어 주세요. ![](https://www.dropbox.com/s/4qlbscdst9f6kpw/0501.jpg?dl=1) ### 요구사항 + 영웅은 다음과 같은 속성을 갖는다. - 이름 - 체력 (모든 영웅의 기본체력은 100으로 동일) + 영웅은 펀치를 통해 상대 영웅에게 피해를 입힐 수 있다. - 펀치는 랜덤하게 발동된다. + 게임은 두 영웅의 생성과 동시에 시작되며 하나가 죽을 때까지 진행된다. - 반복문을 사용하세요 ### 설계 ![](https://www.dropbox.com/s/fl1flo8uk0wwzac/0502.jpg?dl=1) ### 기본 코드 ```java import java.util.Random; public class Hero { private String name; private int hp = 100; // 생성자 public Hero(String name) { this.name = name; } // 펀치 public void punch(Hero enermy) { enermy.hp -= 10; System.out.printf("[%s]의 펀치\n", this.name); System.out.printf("\t%s: %d/100\n", enermy.name, enermy.hp); } // 테스트 코드 public static void main(String[] args) throws InterruptedException { // 두 영웅 객체를 생성 ??? // 두 영웅 모두 체력이 남아있다면, 계속 싸움을 진행 while (arthas.hp > 0 && leona.hp > 0) { // 1/2 확률로 공격자 선정 ??? // 대상을 공격 ??? // 딜레이 1초 Thread.sleep(1000); } } } ```
## 중간 과제 다음주 수업 첫 시간에 코딩 테스트가 있습니다. 준비해주세요. + 03: 한 주에 얼마나 일하나? + 05: 로또 머신 ### 1. 아래 내용을 복습해주세요 아래의 내용들을 복습하고 동영상 강의에 나오는 예제/실습 코드를 모두 직접 코딩해 주세요. + 반복문 + 배열 + 클래스와 객체 + 객체의 생성과 사용 ### 2. 아래의 소스코드가 수행되는 과정을 그림으로 표현해주세요. ``` public class Employee { // 필드 String name; int[] hours; // 생성자 Employee(String name, int[] hours) { this.name = name; this.hours = hours; } // 직원이 일한 시간을 계산 int totalHours() { int sum = 0; for (int h : hours) sum += h; return sum; } public static void main(String[] args) { // 직원의 이름을 배열로! String[] names = { "E0", "E1", "E2", "E3", "E4", "E5", "E6", "E7" }; // 직원들이 일한 시간을 배열로! int[][] hours = { { 2, 4, 3, 4, 5, 8, 8 }, { 7, 3, 4, 3, 3, 4, 4 }, { 3, 3, 4, 3, 3, 2, 2 }, { 9, 3, 4, 7, 3, 4, 1 }, { 3, 5, 4, 3, 6, 3, 8 }, { 3, 4, 4, 6, 3, 4, 4 }, { 3, 7, 4, 8, 3, 8, 4 }, { 6, 3, 5, 9, 2, 7, 9 } }; // 직원을 가리킬 수 있는 8칸짜리 배열을 생성! Employee[] employees = new Employee[names.length]; // 위에서 만든 배열에다가 실제 객체를 생성 후 연결! for (int i = 0; i < names.length; i++) { employees[i] = new Employee("Tom", hours[i]); } // 각각의 객체의 일한 시간을 출력! for (int i = 0; i < employees.length; i++) { Employee e = employees[i]; System.out.println(e.totalHours()); } // 시간에 따라서 객체를 정렬한다! for (int i = 0; i < employees.length; i++) { for (int j = i; j < employees.length; j++) { if (employees[i].totalHours() < employees[j].totalHours()) { Employee tmp = employees[i]; employees[i] = employees[j]; employees[j] = tmp; } } } // 최종 출력! for (Employee e : employees) { System.out.printf("%s: %d\n", e.name, e.totalHours()); } } } ``` ### 3. 아래의 소스코드에서 로또번호가 중복 되지 않는 원리를 설명해주세요 ``` public class Lotto { public static void main(String[] args) { boolean[] isPicked = new boolean[46]; int[] 로또 = new int[6]; for (int j = 0; j < 5; j++) { int count = 0; System.out.print(j + 1 + "번째 로또 숫자는 : "); for (int i = 0; i < 로또.length; i++) { // 중복되지 않은 수가 나올때 까지 무한히 반복! while (true) { 로또[i] = generateNumber(); if (isPicked[로또[i]] == false) { isPicked[로또[i]] = true; // 뽑았다고 기록! break; } } System.out.print(로또[i]); count++; if (count == 로또.length) { break; } System.out.print(", "); } System.out.print(" 입니다.\n"); } } private static int generateNumber() { return (int) ((Math.random() * 45) + 1); } } ```
# 주사위 만들기 주사위는 면의 개수에 따라서 반환 하는 값이 다릅니다. 일반적인 주사위라고 함은 6개의 면을 가진 주사위로써, 1부터 6사이의 임의의 정수 값을 얻을 수 있습니다. ## 문제 아래의 과정을 따라 최후의 주사위를 출력하는 프로그램을 작성해 주세요 ## Step 1 주사위가 이름과 면의 개수 정보를 갖도록 필드를 만들고, 1부터 n사이의 임의의 정수를 반환 하는 메소드 갖도록 클래스를 작성하세요 ``` // 주사위 클래스! public class Dice { String name; int n; // 생성자 Dice(String name, int n) { this.name = name; this.n = n; } // 주사위를 던짐! 1 ~ n까지의 값을 반환! int roll() { return (int) (Math.random() * n) + 1; } // main public static void main(String[] args) { Dice d10 = new Dice(10); System.out.println(d10.roll()); } } ``` ## Step 2 **Step 1**에서 만든 클래스를 토대로 1면체 부터 12면체 주사위를 생성하되, 순서대로 12간지의 이름을 붙여 생성해주세요. ``` Dice[] dices = new Dice[12]; dices[0] = new Dice("쥐", 1); dices[1] = new Dice("소", 2); dices[2] = new Dice("호랑이", 3); ... dices[11] = new Dice("돼지", 12); ``` ## Step 3 toString() 메소드를 작성하여 아래 형식과 같이 주사위 정보를 출력 할 수 있도록 해주세요. ``` // System.out.println(dices[11].toString()); [돼지] 12면체 주사위 (1 ~ 12) ``` ## Step 4 Step 2에서 만든 주사위들을 모두 던져 짝수가 나온 주사위들만 남겨주세요. ``` // 필드값 추가 Dice { ... boolean isAlive; } // main if (dices[0].roll % 2 == 0) dices[0].isAlive = true; else dices[0].isAlive = false; ``` ## Step 5 Step 4의 과정을 주사위가 하나도 남지 않을 때까지 반복 한뒤, 가장 마지막까지 살아남은 주사위의 이름을 출력해주세요. ``` // 출력 예 [호랑이] 3면체 주사위 (1 ~ 3) [돼지] 12면체 주사위 (1 ~ 12) ```
# 소개팅 매칭 요즘 유행인 소개팅 어플은 외모를 점수화 하여 비슷한 점수대의 회원들 끼리 매칭을 시켜준다고 합니다. ## 문제 아래 과정을 통해 연결가능한 소개팅 매칭 쌍을 찾아주세요. ## Step 1 소개팅 회원들의 정보를 담을 수 있는 클래스를 만들어 주세요. 필요한 정보는 아래와 같습니다. + 이름 + 성별 + 평점 ``` // 소스코드 예 User { String name; boolean isMale; double point; } ``` ## Step 2 이름과 성별을 입력하여 회원객체를 10명 생성해주세요. 회원 평점은 랜덤하게 0.0부터 5.0 사이의 값을 갖도록 만들어주세요 ``` User { // 필드.. // 생성자 User(String name, boolean isMale) { this.name = name; this.isMale = isMale; this.point = Math.random() * 5; } // main public static void main(String[] args) { User[] users = new User[10]; users[0] = new User("소희", false); users[1] = new User("영수", true); ... users[9] = new User("설민", true); } ``` ## Step 3 toString 메소드를 오버라이드 하여 객체의 정보를 아래 형식과 같이 출력가능하게 해주세요 소스코드 예 ``` public String toString() { return String.format("%s(%s: %.1f)\n", name, isMale, point); } ``` 출력 예 ``` // System.out.println(user[0].toString()); // 이름(성별: 평점) 소희(여: 4.5) ``` ## Step 4 회원들의 가능한 매칭 쌍을 출력 시켜주세요. 매칭 기준은 아래와 같습니다. + 성별이 다를 것. + 평점차이가 0.8점 이상 차이나지 않을 것. ``` // 소스코드 예 for (int i = 0; i < users.length; i++) { for (int j = i + 1; j < users.length; j++) { User source = users[i]; User target = users[j]; if (source.isMale != target.isMale) { if (Math.abs(source.point - target.point) < 0.8) System.out.println(source.toString() + " - " + target.toString()) } } } ``` ``` // 출력 예 소희(여: 4.5) - 영수(남: 4.8) 소희(여: 4.5) - 민성(남: 4.1) ... 설민(남:2.4) - 민아(여: 2.6) ```
# 평창 동계 올림픽 현재(2018.02.19) 평창 동계 올림픽의 메달순위 결과는 아래와 같습니다. ![Imgur](https://i.imgur.com/SesdQof.png) ## 문제 앞으로 20경기가 남아있고, 각 메달을 획득 할 확률이 같다고 할 때, 최종 결과를 출력하는 프로그램을 작성해주세요. ## Step 1 출전국가에 대한 정보를 클래스로 만들어 주세요. (출전국가는 이름, 각 메달수를 갖음) ``` Country { String name; int gold; int silver; int bronze; } ``` ## Step 2 현재 메달 순위에 등록된 각 나라별 정보를 생성자를 통해 배열로 만들어 주세요. ``` Country { // 필드 ... // 생성자 Country(String name, int gold, int silver, int bronze) { this.name = name; this.gold = gold; ... } // main public static void main(String[] args) { Country[] countries = new Country[10]; countries[0] = new Country("노르웨이", 10, 9, 8); ... countries[9] = new Country("일본", 2, 5, 3); } } ``` ## Step 3 Step 2에서 만든 각나라별 정보들이 잘 등록 되었는지 확인할 수 있게 toString() 메소드를 작성해주세요 ``` // System.out.println(countries[0].toString()); 노르웨이 10 / 9 / 8 Total: 27 ``` ## Step 4 앞으로 남은 20경기의 각 메달을 10개국 중 임의의 한 나라에 수여 하도록 코드를 작성해주세요. ``` for (int i = 0; i < 20; i ++) { int randomIndex = (int) (Math.random * 10); countries[randomIndex].gold++; int randomIndex = (int) (Math.random * 10); countries[randomIndex].silver++; int randomIndex = (int) (Math.random * 10); countries[randomIndex].bronze++; } ``` ## Step 5 금, 은, 동 메달에 따라 출전국가를 정렬하고, 최종 순위를 출력 해주세요. ``` // 출력 예 1. 노르웨이 13 / 10 / 10 Total: 33 2. ... ... 10. 일본 3 / 6 / 3 Total: 12 ```
# 대여 가능한 책 ## 문제 대여가 가능한 책의 목록을 출력하는 프로그램을 작성해주세요. ## Step 1 이름, 가격, 대여중 여부를 확인 할 수 있게 Book 클래스를 만들어 주세요. ``` Book { String title; int price; boolean borrowed; } ``` ## Step 2 적절한 생성자를 작성하고 이를 통해 10권의 샘플 책을 배열에 하나씩 만들어 주세요. ``` // 생성자 Book(String name, int price, boolean borrowed) { ... } ``` ``` // main Book[] books = new Book[10]; books[0] = new Book("나루토", 3500, false); ... books[9] = new Book("맥심", 14000, false); ``` ## Step 3 샘플 책들이 잘 만들어 졌는지 확인 할 수 있게 toString() 메소드를 작성해 주세요. ``` // System.out.println(books[0].toString()); [나루토] 3500원, 대여중? false ``` ## Step 4 Book 클래스에 대여시작(rented)메소드와 반납완료(returned) 메소드를 작성해주세요. ``` System.out.println(books[0].toString()); // [나루토] 3500원, 대여중? false books[0].rented(); System.out.println(books[0].toString()); // [나루토] 3500원, 대여중? true books[0].returned(); System.out.println(books[0].toString()); // [나루토] 3500원, 대여중? false ``` ## Step 5 샘플 책 10권중 임의의 5권을 선택하여 빌려주고, 나머지 대여 가능한 책의 목록을 출력해주세요. ``` // 출력 예 [나루토] 3500원, 대여중? false [슬램덩크] 4000원, 대여중? false [소년탐정 김전일] 3500원, 대여중? false [멘즈헬스] 1500원, 대여중? false [맥심] 14000원, 대여중? false ```