본문 바로가기

개발일지/Java + Spring

211020 Java - 시험 풀이

1번(가장 작은 숫자와 가장 큰 숫자를 출력)

		//1번
		int[] score = {79, 88, 91, 33, 100, 55, 95};
        int max = score[0];
        int min = score[0];
        
        for(int i=0; i<score.length-1; i++) 
        {
        	if(min>score[i])
        	{
        		min = score[i];
        	}
        }
        System.out.println(min);
        
        for(int i=0; i<score.length-1; i++)
        {
        	if(max<score[i])
        	{
        		max = score[i];
        	}
        }
        System.out.println(max);
	}

 

두 숫자를 비교해서 작은 숫자를 대입한다.

MAX의 경우 반대이다. 

 


 

2. 길이가 10인 배열 iArr을 생성하고 
0~9의 숫자로 차례대로 초기화하여 출력 한후 (포문 열번 돌림)

random()을 이용해서 배열의 임의의 위치에 있는 값과 
배열의 첫 번째 요소인 iArr[0] 의 값을 교환하는 일을 
100번 반복하다가 끝낸후 iArr배열을 출력하는 프로그램
출력예) 0123456789
       5827164930 --이부분은 random 인덱스와 [0] 번째 값 
                   --교환으로 실행시마다 다른 결과 출력

 

2번

		int[] iArr = new int[10];
		int i, b, tmp;
        
        for(i=0; i<iArr.length; i++) 
        {
        	iArr[i] = i;
        	System.out.print(iArr[i]);
        }
       
        for(i=0; i<=100; i++)
        {
        	//랜덤 발생
        	b = (int)(Math.random()*10);
        	//변수 세개로 자리 바꾸기
        	tmp = iArr[0];
        	iArr[0] = iArr[b];
        	iArr[b] = tmp;
        }
        
        System.out.println();
        
        for(i=0; i<iArr.length; i++)
        {
        	System.out.print(iArr[i]);
        }

 

 

인덱스가 0~9까지 있으니까

랜덤을 이용해서 1~9까지 랜덤으로 뽑아낸다.

 

여기선 이 공식이 적용

T = A

A = B

B = T

 

 

 

3번

        // 3번
         * 
		int[] iArr = {95, 75, 85, 100, 50};
		int i, tmp;
		
		for(i=0; i<iArr.length-1; i++ )
		{
			for(int j=i+1; j<iArr.length; j++)
			{ //교환할 인덱스 값만 확보
				if(iArr[i] > iArr[j])
				{
					tmp = iArr[i];
					iArr[i] = iArr[j];
					iArr[j] = tmp;
				}
			}
            //여기서 교환 -> [i]에 값과 [교환할 인덱스 위치 값]과 교환
		}
		
		for(i=0; i<iArr.length; i++)
        {
        	System.out.printf("%d ", iArr[i]);
        }

 

select sort의 원리이며, 메소드는 따로 있다!

 

 

4번


		//로또
		int[] lotto = new int[45];
		int i, ran;
		
		for(i=0; i<lotto.length; i++)
		{
			lotto[i] = i+1;
		}
		
		for(i=0; i<6; i++)
		{
			//인덱스 교환을 해야하니까 +1을 넣지 않음 0부터 시작이니까 
			ran = (int)(Math.random()*45);
			tmp = lotto[i];
			lotto[i] = lotto[ran];
			lotto[ran] = tmp;
		}
		
		for(i=0; i<6; i++)
		{
			System.out.printf("ball[%d] = %d\n", i, lotto[i]);
		}

 

 

 

 

5. 연도와 월을 입력받아 해당 월의 날 수를 출력하다가 월이 0 이면 종료하는 프로그램 (단, 월이 잘못 입력되면 “잘못 입력하였습니다.” 출력)
입.출력예) 년 = 2000

#윤년계산 : 1. 400년 마다
                2. 4년 마다 오면서 100년은 제외

 

 

		Scanner sc = new Scanner(System.in);
		int[] days = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
		int year, month;
		
			
		while(true)
		{
			System.out.print("년 = ");
			year = sc.nextInt();
			System.out.print("월 = ");
			month = sc.nextInt();
			

			if(year == 0)
			{
				break;
			}
			if(0 < month && month < 13)
			{
				if(year%400 == 0 || year%4 == 0 && year%100 != 0)
				{
					days[2] = 29;
				}
                              else
                              {
					days[2] = 28;
					//바꿔주지 않으면 다음에 실행할 때도 윤년이 아닌 경우 29가 찍히기 때문에 꼭 넣어주어야한다. 
				}
				System.out.printf("입력하신 달의 날 수는 %d일입니다.\n\n", days[month]);
			}
			else
			{
				System.out.println("잘못 입력하였습니다.");
			}
		}

 

입력한 달의 수를 뽑아내는 코드이지만,

윤년의 경우 29일로 바꾸어준다!

 

if(year%400 == 0 || year%4 == 0 && year%100 != 0)

year%400 == 0 || (400년으로 나누어지거나)

year%4 == 0 && year%100 != 0 (4로 딱 나누어지지만 100으로 나누어지면 안 됨)

 

else 
{
days[2] = 28;
}

바꿔주지 않으면 다음에 실행할 때도 윤년이 아닌 경우 29가 찍히기 때문에 꼭 넣어주어야한다.