romworld

Chapter 05-2. 배열 문제 (거스름돈, *그래프, 중복값 제거,로또번호, 가위바위보, 주사위 출력) 본문

JAVA/문제풀이

Chapter 05-2. 배열 문제 (거스름돈, *그래프, 중복값 제거,로또번호, 가위바위보, 주사위 출력)

inderrom 2022. 9. 18. 20:23

문제 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]);

		}
Comments