[Java]배열연습문제 - 야구게임

jh5959·2026년 2월 16일

Java

목록 보기
6/9

Q1. 1~9의 숫자 세자리로 이루어진 2개의 배열을 비교해서 결과를 출력하시오.
(숫자 통일, 위치 통일 X -> b++ , 숫자 통일, 위치 통일 O -> s++)
ex)


풀이

public class ArrayBaseballGame {
    public static void main(String args[]){
        int[] arr = new int[3];
        int[] arr2 = new int[3];

        int s=0;
        int b=0;

        //1. 각 배열의 크기만큼 난수 대입
        for(int i=0; i<arr.length; i++){
            arr[i]=(int)(Math.random()*9+1); //1~9 중 세개 대입
            arr2[i]=(int)(Math.random()*9+1);
        }
        
        //2. s계산, 자리가 같은 원소를 비교 같으면 s++
        for(int i=0; i<arr.length; i++){
            if(arr[i]==arr2[i])
                s++;
        }

        //3. b계산, 자리가 다른 원소를 비교 같으면 b++
        for(int i=0; i<arr.length; i++){
            for(int j=0; j<arr.length; j++){
                if(i!=j){//자리가 다른 원소가 비교하기 위해서 i랑 j랑 다를 때만 
                    if(arr[i]==arr2[j]){
                        b++;
                    }
                }
            }
        }

        System.out.print("arr=  ");
        for(int i: arr)
            System.out.print(+i);
        
        System.out.println();
        System.out.print("arr2= ");
        for(int i: arr2)
            System.out.print(i);
        
        System.out.println();
        System.out.printf("%dS %dB",s,b);

    }
}

코드 설명

  1. 각 배열의 크기만큼 난수 대입
  2. s계산, 자리가 같은 원소를 비교, 같으면 s++
  3. b계산, 자리가 다른 원소를 비교, 같으면 b++

코드 문제점

  1. 배열에 난수 대입할 때 숫자가 중복할 수 있음
  2. s계산과 b계산 로직이 분리되어 있어 연산 비용이 더 든다

개선하기

  1. 난수 대입 중복 숫자 체크 로직으로 서로 다른 숫자가 대입되게 만들기
  2. 비교 로직을 통일해서 연산 비용 줄이기

0개의 댓글