일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Homebrew
- 단축키
- python
- 대덕인재개발원
- 자바문제
- nodejs
- 객체지향
- API
- FastAPI
- JDBC
- 반복문
- pyqt
- Error
- 맥
- Android
- servlet
- Java
- spring
- Mac
- 생활코딩
- 배열
- jsp
- ibatis
- 자바
- 컬렉션프레임워크
- crud
- 이클립스
- ddit
- html
- Oracle
Archives
- Today
- Total
romworld
Chapter 05-2. 배열 문제 (거스름돈, *그래프, 중복값 제거,로또번호, 가위바위보, 주사위 출력) 본문
문제 1
거스름돈
거스름돈 (1000~5000원)이 동전의 단위마다 몇 개의 동전이 필요한지 출력해주세요.
(동전의 종류를 배열로 관리)
{500, 100, 50, 10}
* 예시)
* 거스름돈 : 2860원
* 500원 : 5개
* 100원 : 3개
* 50원 : 1개
* 10원 : 1개
- 배열과 반복문을 이용한다.
ackage sec03.exam01;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class hello {
public static void main(String[] args) {
Random rnd = new Random();
// 1000~5000 => 100~500 * 10 => (0~400 + 100) * 10
int change = (rnd.nextInt(401)+ 100) * 10;
System.out.println("잔돈 : " + change);
int[] coin = {500, 100, 50, 10};
// 방법1
int change_copy = change; //2860
int[] count = {0, 0, 0, 0,};
count[0] = change_copy / coin[0]; //2860 / 500 => count[0] (몫) => 4
System.out.println(coin[0] + "원 : " + count[0] + "개");
//동전 갯수가 정해지면 바로 출력
change_copy %= coin[0];// 2860 % 500 => 잔돈 (나머지) => 360
count[1] = change_copy / coin[1]; // 360 / 100 => count[1] (몫) => 3
change_copy %= coin[1]; // 360% 100 => 잔돈 (나머지) => 60
System.out.println(coin[1] + "원 : " + count[1] + "개");
count[2] = change_copy / coin[2]; // 60/ 50 => count[2] (몫) => 1
System.out.println(coin[2] + "원 : " + count[2] + "개");
change_copy %= coin[2]; // 60 % 50 => 잔돈 (나머지) => 10
count[3] = change_copy / coin[3]; // 10 / 10 => count[3] (몫) => 1
System.out.println(coin[3] + "원 : " + count[3] + "개");
System.out.println();
}
}
밑에 for문을 사용하면 코드가 더 간결해진다!
package sec03.exam01;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class hello {
public static void main(String[] args) {
//방법 2
Random rnd = new Random();
int change = (rnd.nextInt(401) + 100) * 10;
System.out.println("거스름돈 : " +change);
int[] coin = {500, 100, 50, 10};
int change_copy = change;
int[] count = {0, 0, 0, 0,};
for(int i = 0; i < coin.length; i++) {
count[i] = change_copy / coin[i];
System.out.println(coin[i] + "원 :" + count[i] + "개");
change_copy %= coin[i];
}
}
}
문제 2
* 그래프
1~5의 숫자가 발생된 만큼(10) *을 사용해 그래프를 그려주세요.
* 예시)
1 : *** 3
2 : **** 4
3 : ** 2
4 : ***** 5
5 : * 1
Random rnd = new Random();
int[] arr = new int[5]; // {0, 0, 0, 0, 0,}
// 1~5 => 0~4 + 1
for (int i = 0; i < 10; i++) {
int r = rnd.nextInt(5) + 1;
arr[r - 1]++;
System.out.println(r + ":" + Arrays.toString(arr));
}
for (int j = 0; j < arr.length; j++) {
System.out.print((j + 1) + " : ");
for (int i = 0; i < arr[j]; i++) {
System.out.print("*");
}
System.out.println(" " + arr[j]);
}
문제 3
중복값 제거
1~10 사이의 랜덤한 값이 10개 저장된 배열에서
중복된 값이 제거된 배열을 만들어주세요.
{5,8,8,4,4,4,1,1,2,5}
=> {5,8,4,7,1,2}
package test;
import java.awt.List;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Random rnd = new Random();
int[] pool = new int[10];
for (int i = 0; i < pool.length; i++) {
pool[i] = rnd.nextInt(10) + 1; // 0~9 +1 ==> 1~10
}
System.out.println(Arrays.toString(pool));
int[] a = new int[] { pool[0] };
for (int i = 0; i < pool.length; i++) {
int pick = pool[i]; //pool에서 숫자 하나를 꺼냄
boolean duple = false; //중복검사 결과를 위해 만듦
//int count = 0; << duple자체가 어려우면 count로 만들어줘도 됨
//배열 a에 pick숫자가 이미 있는지 확인
for (int j = 0; j < a.length; j++) {
if (pick == a[j])//있으면 duple = true !!!! 웹에서도 자주 사용함
// if(pick == a[j]) c++; // 있으면 C ==1;
duple = true;
}
if (!duple) {{ // if(duple == false){ => 중복이 없다면
// if(c == 0) { // c가 0이라는 것은 c++을 만나지 않았다는 것
int[] b = new int[a.length + 1]; // a.l = 1 => b.l = 2
//배열 a보다 길이가 1 큰 임시 배열 b만듦
//배열 a에 있는 값을 배열 b에 복사
for (int j = 0; j < a.length; j++) {
b[j] = a[j];
}
//중복이 아닌 숫자 pick을 배열 b 맨 마지막에 넣어줌
b[b.length - 1] = pick;
// 배열 a를 배열 b로 주소값을 변경함
a = b;
}
}
System.out.println(Arrays.toString(a));
}
}
1~100 까지의 랜덤한 숫자 100개를 갖는 배열을 만들고
2~5사이의 랜덤한 수로 나누어 떨어지는 숫자로만
이루어진 배열을 출력해주세요.
옵션:1 중복제거
// 1~100 => 0~99 +1
pool = new int[100];
for (int i = 0; i < pool.length; i++) {
pool[i] = rnd.nextInt(100) + 1;
}
System.out.println(Arrays.toString(pool));
a = new int[100]; // 원본배열의 모든 값이 들어갈 수 있는 크기의 배열을 선언함
// 2~5 =? 0~3 +2
int target = rnd.nextInt(4) + 2;
System.out.println("target : " + target);
// 값이 들어가야할 배열의 인덱스 번호
int c = 0;
// pool의 모든 값을 반복문 실행함
for (int i = 0; i < pool.length; i++) {
// pool의 이번 값(pool[i])이 타겟의 배수라면
if (pool[i] % target == 0) {
// 배열 a의 c위치에 값을 넣고 c를 1 증가시킴
a[c++] = pool[i];
System.out.println(Arrays.toString(a));
}
}
// 결과를 보여줄 배열 result를 만듦
// 길이는 c로 지정 => 배열 a에 값이 몇개 들어있는지 나타냄
int[] result = new int[c];
// 배열 a의 값을 배열 result에 복사함
// => c만큼만 반복해서 실제로 값이 들어있는 곳만 복사함
for (int i = 0; i < result.length; i++) {
result[i] = a[i];
}
System.out.println(Arrays.toString(result));
// 랜덤숫자 100개 중에 타겟으로 나눈것들만 모아놓은 것이 result
중복값 제거는
flag , tmp 를 사용해서 제거할 수 있음!!!
문제 4
로또
Random rnd = new Random();
int[] lotto = new int[6];
for (int i = 0; i < lotto.length; i++) {
lotto[i] = rnd.nextInt(45) + 1;
for (int j = 0; j < i; j++) {
if (lotto[i] == lotto[j]) {
i--;
break;
}
}
}
//(option 1 오름차순 출력)
for (int i = 0; i < lotto.length-1; i++) {
for (int j = i + 1; j < lotto.length; j++)
if (lotto[i] > lotto[j]) {
int temp = lotto[i];
lotto[i] = lotto[j];
lotto[j] = temp;
}
}
for (int i = 0; i < lotto.length; i++) {
System.out.printf("%d ", lotto[i]);
}
문제 5
가위바위보 게임
Scanner sc = new Scanner(System.in);
System.out.println("가위 바위 보를 입력하세요: ");
String gamer = sc.nextLine();
System.out.println("게이머 : " + gamer);
String[] coms = new String[] { "가위", "바위", "보" };
String com = coms[new Random().nextInt(coms.length)];
System.out.println("인공지능컴퓨터 : " + com);
switch (com) {
case "가위":
if (gamer.equals("가위")) {
System.out.println("비겼습니다.");
break;
} else if (gamer.equals("바위")) {
System.out.println("게이머 승리!");
break;
} else if (gamer.equals("보")) {
System.out.println("인공지능 컴퓨터 승리!");
break;
}
case "바위":
if (gamer.equals("가위")) {
System.out.println("인공지능 컴퓨터 승리!");
break;
} else if (gamer.equals("바위")) {
System.out.println("비겼습니다!");
break;
} else if (gamer.equals("보")) {
System.out.println("게이머 승!");
break;
}
case "보":
if (gamer.equals("가위")) {
System.out.println("게이머 승리!");
break;
} else if (gamer.equals("바위")) {
System.out.println("인공지능 컴퓨터 승리!");
break;
} else if (gamer.equals("보")) {
System.out.println("비겼습니다!!");
break;
}
}
문제 6
주사위 출력
System.out.println("---------------");
System.out.println("면\t빈도");
System.out.println("---------------");
Random rnd = new Random();
int[] dice = new int[6];
for (int i = 0; i < 10000; i++) {
int r = rnd.nextInt(dice.length) + 1;
dice[r - 1]++;
}
for (int i = 0; i < dice.length; i++) {
System.out.println(i + 1 + "\t" + dice[i]);
}
'JAVA > 문제풀이' 카테고리의 다른 글
배열 middleTest (1) | 2022.09.23 |
---|---|
chapter 05-4. 다차원배열 문제 (학생들의 평균 구하기) (1) | 2022.09.23 |
Chapter 04. 조건문과 반복문 문제 ( Counting Star) (1) | 2022.09.14 |
Chapter 04. 조건문과 반복문 문제 (삼각형 판별,월 입력, 점수평균, 가위바위보게임,거스름돈, 랜덤맞추기,베이스볼,로또) (2) | 2022.09.13 |
Chapter 03. 연산자 문제 (홀수짝수출력, 몫과나머지,메트로폴리스,윤년) (0) | 2022.09.11 |
Comments