문제풀이/일일연습문제

일일문제 : 10번째- 230104 [1-1-수] - 평균출력, 로또

Mo_bi!e 2023. 1. 4. 13:00

[3번]

1. 문제설명

정수배열입력, 배열요소들의 평균값을 실수 결과값으로 돌려주는 average라는 메소드 작성

 

1) 정수 배열 100 90 80 입력받은경우

 

2) 길이가 정해지지 않은 정수 배열입력받은경우

 

2. 나의 해답

package midtermFirst;

public class test230104 {

	private static float average(int[] num) {
		// TODO Auto-generated method stub
		
		float avg = 0;
		float tmp = 0;
		
		for(int i = 0 ; i < num.length ; i++) {
			//정수값 입력받고
			avg += (float) num[i];
		}
		//평균값 
		avg /= num.length;
		
		System.out.println(avg);
		
		//실수값으로 돌려줌
		return avg;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		float result = 0;
		int [] num = {100,90,80};
		int [] rand = {2,55,34,652,53,2,4,1235,3,453,7,546,34,542,523,623,6,235,423,643,6,3456,435,2};
		
		//실수값 돌려주는
		result = average(num);
		
		//길이가 정해지지 않은 정수배열 받은 경우
		result = average(rand);
		
		
	}


}

콘솔 

3. 정답 코드

상동

4. 보충 및 회고 

(1) 보충

 

(2) 회고 : 문제풀이과정에서 어떻게 접근하려고했는지 (접근방법) + 어려움이 있었는데 해결했다.

 

실수로 강제형변환을 유용하게 이용했다.

이전에 문제 푼 것이 어느정도 보람이 있었던것 같아서 다행이다.

다만 f로 형변환하는것은 리터럴에게만 가능하다는 점 기억해두자!

 


 

[4번]

1. 문제설명

1~49 6개 수 뽑는 Lotto클래스 작성

 

1) Lotto 객체 초기화 생성자 가질것

2) generateNumbers 라는 이름 메소드 가질것

해당 메소드는 중복되지 않는 6개 랜덤 정수 생성 후 배열로 결과값 알려주기

3) 랜덤 정수 출력위해 java.util.Random클래스 사용하기

 

2. 나의 해답

package midtermFirst;

public class app {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Lotto lot = new Lotto();
		lot.run();
							
	}

}
package midtermFirst;

import java.util.Random;

public class Lotto {
	
	int [] result;
	int num;
	
	
	public Lotto() {
		// TODO Auto-generated constructor stub
		result = new int[6];
		num = 0;
	}
	
	
	public void run() {
		// TODO Auto-generated method stub
		
		result = generateNumbers();
		printnum(result);
		
	}

	
	public int[] generateNumbers() {
		// TODO Auto-generated method stub
		
		Random rand = new Random();
	
		int i = 0;
	
	REGAME:
		while(i < 6) {
			num =  rand.nextInt(49) + 1;
			System.out.println(num);
			
			for(int j = 0 ; j < 6 ; j++) {
				if(result[j] == num) 
					continue REGAME;
			}
			result [i] = num;
			i++;
		}
		
		return result;
		
	}


	private void printnum(int [] array) {
		// TODO Auto-generated method stub
		
		for(int i = 0 ; i < 6 ; i++)
			System.out.print(array[i] + " ");
		
	}
}

 

 

3. 정답 코드

 

4. 보충 및 회고 

(1) 보충

 

(2) 회고 : 문제풀이과정에서 어떻게 접근하려고했는지 (접근방법) + 어려움이 있었는데 해결했다.

 

 

1) 

서툴지만 이런 방식으로 하려고 했었다.

원래는 동일한지와 관련해서 다시 출력과 배열에 대입을 if else 조건으로 나누려고했었다

그러나 문제는 난수가 배열에 동일한 경우 대입은 되지않지만,

다시 출력되지않고 초기화 값인 0으로 남겨진 채로 다음 반복문으로 넘어가버리는 문제가 발생했다.

 

결과 0이 나와버렸다.

 

하지만 굳이 if else 쓸 필요없이 해당조건만 만난경우 continue를 써서 다시 처음부터 시작하게끔 하면 가능했다.

 

2) 한편 앞 조건을 바탕으로 -1을 하면 무한 loop가 도는 경우도 있었다.

서투르게 continue인 경우 인덱스가 -1이 되게끔하였다.

종료식을 만나지 못하고 지속해서 그 값이 떨어져서 그러하다.

 

그럼에도 불구하고 영원히 끝나지 않아서 의외였다.

내 생각에는 배열의 초기화값 0과 random에 넣는 값 0이 일치해 버려서 그런것같다.

 

 

3) 여전한 실수로 반복문 블럭을 잘못잡은경우도있다.

이거는 꼭꼭 반복문을 쓰면은 블럭을 한번더 꼭 체크하자

문제있을 시 이것을 우선순위로 보고 검토하자.