728x90
반응형

<오늘의 학습>

1. 선택 정렬과 버블 정렬

2. 구구단 3,6,9단만 출력하기

3. 배열을 출력하되 홀수는 음수로 출력하기

4. 홀수/짝수 평균 구하기

5. 최댓값과 최솟값 차이 구하기

 

 

1. 선택 정렬과 버블 정렬

▶ 실습 내용

 

[JAVA] 선택 정렬과 버블 정렬

1. 선택 정렬 ▶ 코드 /*선택정렬*/ int[] arr={9,6,7,3,5};//정렬할 배열 int index, min, temp;//최솟값이 들어있는 인덱스 변수, 최솟값을 비교할 변수, 값을 변경할 때 사용할 변수 for(int i=0;i6? index=j;//index=1

deliciouscode.tistory.com

 

 

 

2.  구구단 3, 6, 9단만 출력하기

▶ 코드

		for(int i=3; i<=9; i+=3){
			System.out.println("<"+i+"단>");
			
			for(int j=1; j<=9; j++){
				System.out.println(i + "*" + j + "=" + (i*j));
			}
			System.out.println();	//줄바꿈
		}

 

▶ 출력 결과

<3단>
3*1=3
3*2=6
3*3=9
3*4=12
3*5=15
3*6=18
3*7=21
3*8=24
3*9=27

<6단>
6*1=6
6*2=12
6*3=18
6*4=24
6*5=30
6*6=36
6*7=42
6*8=48
6*9=54

<9단>
9*1=9
9*2=18
9*3=27
9*4=36
9*5=45
9*6=54
9*7=63
9*8=72
9*9=81

 

 

 

3.  배열을 출력하되 홀수는 음수로 출력하기

  •  6개의 숫자를 입력받아 배열에 저장해라. 만약 입력받은 숫자가 홀수일 경우 음수로 바꿔 저장한다.

 

▶코드

		Scanner scan = new Scanner(System.in);
		int arr[] = new int[6];

		for(int i=0; i<6; i++){
			System.out.print((i+1)+"번째 숫자를 입력하세요:");
			int num = scan.nextInt();

			if(num%2 != 0){	//홀수
				arr[i] = -num;
			} else {	//짝수
				arr[i] = num;
			}
		}
		System.out.println(Arrays.toString(arr));

		scan.close();

 

▶출력 결과

1번째 숫자를 입력하세요:1
2번째 숫자를 입력하세요:2
3번째 숫자를 입력하세요:3
4번째 숫자를 입력하세요:4
5번째 숫자를 입력하세요:5
6번째 숫자를 입력하세요:6
[-1, 2, -3, 4, -5, 6]

 

 

 

4. 홀수/짝수 평균 구하기

  • 배열 {15, 22, 33, 50, 19, 2}의 홀수들의 평균과 짝수들의 평균을 각각 구하시오.

 

▶코드

		int arr[] = {15, 22, 33, 50, 19, 2};
		
		int oddSum = 0; //홀수 합
		int oddCnt = 0;	//홀수 갯수
		
		int evenSum = 0; //짝수 합
		int evenCnt = 0; //짝수 갯수
		
		for(int num : arr){
			if(num % 2 == 0){
				evenSum += num;
				evenCnt++;
			}//짝수
			else {
				oddSum += num;
				oddCnt++;
			}//홀수
		}
		
		System.out.printf("홀수 평균:%.2f\n", (double)oddSum/oddCnt);
		System.out.printf("짝수 평균:%.2f\n", (double)evenSum/evenCnt);

 

▶출력 결과

홀수 평균:22.33
짝수 평균:24.67

 

 

 

5.  최댓값과 최솟값 차이 구하기

  • 배열 {40, -20, -30, -10, 50} 에서 가장 큰 수와 가장 작은 수의 차이를 구하라.
  • 단, 음수는 절대 값으로 계산하라.
  • ex) 가장 큰 수 : 50, 가장 작은 수 : -10 => 결과 40

 

▶코드

		int arr[] = {40, -20, -30, -10, 50};
		int max = Math.abs(arr[0]);
		int min = Math.abs(arr[0]);
		
		for(int i=0; i<arr.length; i++){
			max = Math.max(max, Math.abs(arr[i]));
			min = Math.min(min, Math.abs(arr[i]));
		}
		
		System.out.println("arr 배열에서 가장 큰 수와 가장 작은 수의 차이(음수는 절댓값으로 계산):"+(max-min));

 

▶출력 결과

arr 배열에서 가장 큰 수와 가장 작은 수의 차이(음수는 절댓값으로 계산):40

 

 

 

 

 


2023년 5월 26일 금요일

<11일차 수업 후기>

아직은 for(;;)문이 더 익숙하지만 파이썬을 조금 공부해서 그런지 for(:) 문도 어렵지 않게 작성할 수 있었다. 같은 알고리즘이라도 언어마다 작성법이 다르지만, 하나의 언어를 공부한다면 다른 언어를 공부할 때 도움이 많이 된다고 생각했다.

나는 C언어를 주로 공부하고 사용했던 터라 자바의 메소드나 함수는 자주 사용해보지 않았는데, Arrays와 Math 함수를 사용하면 코드가 더 간결해져서 코드를 읽기 편했다. 조금 더 학습하고 연습해서 지금보다 간결하고 깔끔한 코드를 작성하고 싶다.

728x90
반응형
728x90
반응형

 

 

[JAVA] 선택 정렬과 버블 정렬

1. 선택 정렬 ▶ 코드 /*선택정렬*/ int[] arr={9,6,7,3,5};//정렬할 배열 int index, min, temp;//최솟값이 들어있는 인덱스 변수, 최솟값을 비교할 변수, 값을 변경할 때 사용할 변수 for(int i=0;i6? index=j;//index=1

deliciouscode.tistory.com

 

 

선택 정렬 보완

▶ 첫 번째 실습을 보완하여 값을 출력해 보자

  • 최솟값을 저장하는 min변수를 없애고 인덱스 값만 이용해도 정렬이 가능하여, 위 실습 내용을 보완하였다.
		int[] arr={4,5,9,3,6};	//정렬할 배열
		System.out.println("초기 배열:"+Arrays.toString(arr)+"\n");
		int index, temp;	//최솟값이 들어있는 인덱스 변수, 값을 변경할 때 사용할 변수

		for(int i=0;i<arr.length-1;i++){	//배열의 수가 5개이면 4번만 비교하면 된다.
			index=i;	//0
			for(int j=i+1;j<arr.length;j++){	//맨 앞에 최소값을 넣기때문에 i+1부터 비교하면 된다.
				if(arr[index]>arr[j]){
					index=j;
				}
			}

			/*최솟값이 들어있는 인덱스와 자리 변경*/
			if(i != index){
				temp=arr[i];
				arr[i]=arr[index];
				arr[index]=temp;
			}
			System.out.println((i+1)+"번째 정렬:"+Arrays.toString(arr));			
		}
		System.out.println();//줄바꿈

		System.out.println("선택 정렬된 배열:"+Arrays.toString(arr));//배열 출력

 

 

▶ 출력 결과

초기 배열:[4, 5, 9, 3, 6]

1번째 정렬:[3, 5, 9, 4, 6]
2번째 정렬:[3, 4, 9, 5, 6]
3번째 정렬:[3, 4, 5, 9, 6]
4번째 정렬:[3, 4, 5, 6, 9]

선택 정렬된 배열:[3, 4, 5, 6, 9]

 

728x90
반응형
728x90
반응형

<오늘의 학습>

1. 구구단 역순 출력

2. 구구단 정답 맞히기

3. 정수형 배열에 들어있는 값만큼 별 출력

4. 배열의 최솟값 구하기

5. 양수의 최솟값 구하기

6. 절댓값 구하기

7. UP&DOWN

 

 

1. 구구단 역순 출력

▶ 구구단을 9단부터 2단까지 역순으로 출력해 보자.

		System.out.println("<구구단(9단~2단)>");
		for(int i=9;i>1;i--){
			System.out.printf("%d단 : \t",i);
			for(int j=9;j>0;j--){
				System.out.printf("%d*%d=%2d\t", i, j,i*j);
			}
			System.out.println(); //줄바꿈
		}

 

▶ 출력 결과

<구구단(9단~2단)>
9단 : 	9*9=81	9*8=72	9*7=63	9*6=54	9*5=45	9*4=36	9*3=27	9*2=18	9*1= 9	
8단 : 	8*9=72	8*8=64	8*7=56	8*6=48	8*5=40	8*4=32	8*3=24	8*2=16	8*1= 8	
7단 : 	7*9=63	7*8=56	7*7=49	7*6=42	7*5=35	7*4=28	7*3=21	7*2=14	7*1= 7	
6단 : 	6*9=54	6*8=48	6*7=42	6*6=36	6*5=30	6*4=24	6*3=18	6*2=12	6*1= 6	
5단 : 	5*9=45	5*8=40	5*7=35	5*6=30	5*5=25	5*4=20	5*3=15	5*2=10	5*1= 5	
4단 : 	4*9=36	4*8=32	4*7=28	4*6=24	4*5=20	4*4=16	4*3=12	4*2= 8	4*1= 4	
3단 : 	3*9=27	3*8=24	3*7=21	3*6=18	3*5=15	3*4=12	3*3= 9	3*2= 6	3*1= 3	
2단 : 	2*9=18	2*8=16	2*7=14	2*6=12	2*5=10	2*4= 8	2*3= 6	2*2= 4	2*1= 2

 

 

 

2. 구구단 정답 맞히기

▶ 실습 내용

 

[JAVA] Random 함수를 이용한 구구단 답 맞추기

문제 ▶ Random 함수를 이용한다. ▶ 무한 반복문을 이용한다. ▶ 몇 문제를 풀 것인지 입력 받고, 입력 받은 숫자만큼 문제를 출력한다. ▶ 정수형 변수 num1과 num2에 랜덤 값을 넣는다. ▶ num1의 값

deliciouscode.tistory.com

 

 

 

3. 정수형 배열에 들어있는 값만큼 별 출력

▶ 코드

		int arr[]={3, 5, 1, 2, 3};

		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr[i];j++){
				System.out.print("*");
			}
			System.out.println(); //줄바꿈
		}

 

▶ 출력 결과

***
*****
*
**
***

 

 

 

4. 배열의 최솟값 구하기

▶ 코드

		int arr[]={4,3,5,2,1};
		int min=arr[0];//최솟값
		
		
		for(int i=1;i<arr.length;i++){
			if(min>arr[i])	//min=Math.min(min, arr[i]); 값 두개를 비교하여 최솟값을 구하는 함수를 사용하여 같은 결과를 가져올 수 있다.
				min=arr[i];
		}
		System.out.println("배열 arr의 최솟값:"+min);

 

▶ 출력 결과

배열 arr의 최솟값:1

 

 

 

5. 양수의 최솟값 구하기

▶ 코드

		//arr 배열에 들어있는 값 중 양수의 최솟값을 구하시오
		int arr[]={4, -3, 5, -2, 1, -8, 7, -9};
        
		int i; //배열의 첫 번째 양수의 위치를 알기 위한 변수
		int min; //양수보다는 큰 수를 찾는다.

		for(i=0;;i++){
			if(arr[i]>0){	//첫 번째 배열의 값이 양수가 아닐 수 있기 때문에 양수인 첫 번째 값을 찾아 min에 넣기
				min=arr[i];
				break;
			}
		}

		//양수인 arr[i]가 현재의 min값임으로 arr[i+1]배열부터 비교
		for(int j=i+1;j<arr.length;j++){
			if(arr[j]>0){ //arr[j]의 값이 양수일 때만 비교
				if(min>arr[j])
					min=arr[j];
			}
		}

		System.out.println("배열 arr의 양수의 최솟값:"+min);

 

▶ 출력 결과

배열 arr의 양수의 최솟값:1

 

 

▷ 코드 보완

  • 위 코드는 아래 코드로 간단하게 표현할 수 있다.
		int min=arr[0];
		for(int k=1;k<arr.length;k++){
			if(arr[k]>0 && min>arr[k]){
				min=arr[k];
			}
		}

 

 

 

6. 절댓값 구하기

▶ 코드

		int arr[]={4, -3, 5, -2, 1, -8, 7, -9};

		//모든 숫자의 합을 구하되 음수는 절대값을 구해 더하시오
		int sum=0;
		for(int i=0;i<arr.length;i++){ //sum+= Math.abs(arr[i]); 절댓값 구하는 함수와 같은 결과를 가진다.
			if(arr[i]<0) //음수는 절댓값을 더함
				sum+= -arr[i];	//sum+= (arr[i]*(-1));
			else //양수
				sum+= arr[i];
		}
		System.out.println("배열 arr의 총 합(음수는 절댓값):"+sum);

 

 

▶ 출력 결과

배열 arr의 총 합(음수는 절댓값):39

 

 

 

7. UP&DOWN

▶ 실습 내용

 

[JAVA] UP&DOWN 답 맞추기

문제 ▶ Random 함수를 이용한다. ▶ 정수형 변수 num에 랜덤 값을 넣는다. ▶ 숫자를 입력하여 num의 값과 같은지 비교한다. 입력한 숫자가 num의 값보다 작으면 UP, 크면 DOWN을 출력한다. ▶ 사용자가

deliciouscode.tistory.com

 

 

 

 

 


2023년 5월 25일 금요일

<10일차 수업 후기>

10일차 수업부터는 새로운 강사님께 수업을 받는다. 최근까지도 관련 업종에서 일을 하셔서 실무와 관련된 많은 도움을 받을 수 있을 것 같아서 너무 좋다!

오늘부터는 그동안 학습했던 내용 중에 어려웠거나 중요한 내용 위주로 복습하고, 해당 내용의 연습 문제를 풀어보는 방식으로 수업을 진행한다고 하셨다.

오늘 나는 Math 함수를 이용하여 최솟값과 절댓값을 구하는 방법을 배웠다. 아직 함수를 많이 외우지 못해서 자바의 함수에 대해 조금 더 많은 공부를 해야겠다.

728x90
반응형
728x90
반응형

1. 선택 정렬

▶ 아래의 선택 정렬 코드를 보완한 내용

 

[자바] 선택정렬 보완

 

deliciouscode.tistory.com

 

 

▶ 코드

		//선택정렬
		int[] arr={9,6,7,3,5};	//정렬할 배열
		int index, min, temp;	//최솟값이 들어있는 인덱스 변수, 최솟값을 비교할 변수, 값을 변경할 때 사용할 변수

		for(int i=0;i<arr.length-1;i++){ //배열의 수가 5개이면 4번만 비교한다.
			index=i;	//0
			min=arr[i];	//9
			for(int j=i+1;j<arr.length;j++){	//선택 정렬은 맨 앞에 최솟값을 넣기때문에 i+1부터 비교하면 된다.
				if(min>arr[j]){	//9>6?
					index=j;	//index=1
					min=arr[j];	//min=6
				}
			}

			//최솟값이 들어있는 인덱스와 자리 변경
			if(i != index){
				temp=arr[i];
				arr[i]=arr[index];
				arr[index]=temp;
			}
		}

		System.out.println(Arrays.toString(arr));//배열 출력
  • 배열을 정렬하기 위해서는 두 개씩 값을 비교한다. 그래서 배열의 갯수가 5개면 5번이 아니라 4번만 비교하면 된다. (0,1,2,3=> 4번)
  • arr 배열의 갯수가 5개일 때, arr.length의 값은 5이다. 하지만 배열의 맨 끝이 arr2[5]가 아닌 arr2[4]이기 때문에 i는 arr.length-1 의 값까지만 비교한다.
  • 값을 비교하기 위해 첫 번째 인덱스의 값이 최솟값이라고 가정한다. 만약 최솟값을 0으로 설정하면 배열의 모든 값이 음수일 때 배열에 없는 0이 최솟값이 된다. 그렇기 때문에 배열의 값으로 설정한다.
  • 최솟값을 arr[0]으로 설정하면 j는 1부터 비교하면 된다. 이 때, 선택 정렬은 맨 앞에 최솟값을 정렬하기 때문에 j는 i+1의 값부터 시작하는 것으로 설정한다.
  • 설정한 최솟값보다 작은 arr[j]값이 나타난다면 arr[j]이 최솟값이 되고, 맨 끝의 배열까지 비교를 반복한다.
  • 제일 작은 값이 들어있는 인덱스 값과 i 번째 값을 temp 변수를 이용하여 교환한다. 만약 비교가 끝난 뒤에도 index값이 처음 설정한 최솟값 인덱스인 i와 같으면 값을 변경하지 않아도 된다.
  • 끝까지 반복하면 정렬이 완료된다.

 

 

▶ 출력 결과

[3, 5, 6, 7, 9]

 

 

 

2. 버블 정렬

▶ 코드

		//버블 정렬
		int[] arr2={9,6,7,3,5};	//정렬할 배열
		int temp2=0;
		
		for(int i=arr2.length-1;i>0;i--){	//버블 정렬은 최댓값을 맨 뒤에 저장하기 때문에 배열의 맨 뒤를 기준으로 잡고 length-1부터 시작한다. 배열의 수가 5개이면 4번만 비교한다. (4,3,2,1 => 4번)
			for(int j=0;j<i;j++){	//맨 뒤에 최댓값을 넣기 때문에 정렬된 배열 전까지만 비교한다.
				if(arr2[j]>arr2[j+1]){	//인접한 배열인 j번째 배열과 j+1번째 배열을 비교한다.
					temp2=arr2[j];
					arr2[j]=arr2[j+1];
					arr2[j+1]=temp2;
				}
			}
		}
		
		System.out.println(Arrays.toString(arr2));//배열 출력

 

  • 배열을 정렬하기 위해서는 두 개씩 값을 비교한다. 그래서 배열의 갯수가 5개면 5번이 아니라 4번만 비교하면 된다. (4,3,2,1 => 4번)
  • 버블 정렬은 최댓값을 맨 뒤에 저장하기 때문에 배열의 맨 뒤를 기준으로 length-1부터 시작한다. arr 배열의 갯수가 5개일 때, arr.length의 값은 5이다. 하지만 배열의 맨 끝이 arr2[5]가 아닌 arr2[4]이기 때문에 i의 값은 length-1부터 시작한다.
  • 버블정렬은 인접한 arr2[j]와 arr2[j+1]의 값을 반복하여 비교하고 제일 큰 값을 마지막 배열에 정렬한다. 이미 정렬된 최댓값은 비교하지 않기 위해 j<i의 값까지만 비교한다. 만약 j가 i 번째까지 비교를 하게 된다면 i가 4일 때 arr2[j+1]이 arr2[5]가 되기 때문에 오류가 발생한다. 
  • 서로 인접한 값을 비교하여 정렬한다. 왼쪽에 있는 arr2[j]의 값이 크다면 오른쪽에 있는 arr2[j+1]과 값을 변경한다.
  • 끝까지 반복하면 정렬이 완료된다.

 

 

		//위의 코드와 같은 버블 정렬 코드이다.
		for(int i=0;i<arr2.length-1;i++){	//배열의 수가 5개이면 4번만 비교한다.
			for(int j=0;j<(arr2.length-1)-i;j++){	//맨 뒤에 최댓값을 넣기 때문에 -i를 해서 정렬된 값은 비교하지 않는다.
				if(arr2[j]>arr2[j+1]){
					temp=arr2[j];
					arr2[j]=arr2[j+1];
					arr2[j+1]=temp;
				}
			}
		}
  • 위의 버블 정렬 코드와 같은 버블 정렬 코드이다.
  • 맨 뒤에 최댓값을 넣기 때문에 값을 비교하여 정렬하는 j 반복문에서 j<(마지막 배열의 인덱스)-i를 해서 정렬된 값은 비교하지 않는다.

 

 

▶ 출력 결과

[3, 5, 6, 7, 9]

 

728x90
반응형
728x90
반응형

문제

  • Random 함수를 이용한다.
  • 정수형 변수 num에 랜덤 값을 넣는다.
  • 숫자를 입력하여 num의 값과 같은지 비교한다. 입력한 숫자가 num의 값보다 작으면 UP, 크면 DOWN을 출력한다.
  • 사용자가 입력한 값과 num의 값이 같으면 몇 번의 입력만에 정답을 입력했는지 출력한다.

 

 

 

코드

		Random rand = new Random();
		Scanner scan = new Scanner(System.in);

		int num = rand.nextInt(100)+1;	//랜덤 값:1~100
		
		for(int count=1;;count++){ //count 변수를 이용해 몇 번만에 맞추는지 확인
			//숫자 입력
			System.out.printf("1부터 100사이의 랜덤한 숫자를 입력하세요 >> ");
			int temp = scan.nextInt();

			//정답 판별
			if(temp==num){
				System.out.printf("정답입니다! %d번 만에 맞추셨습니다.\n",count);
				break;	//반복 종료
			}
			else if(temp<num)
				System.out.println("UP");
			else if(temp>num)
				System.out.println("DOWN");
			
			System.out.println();//줄바꿈
		}

		scan.close();

 

 

 

출력 결과

1부터 100사이의 랜덤한 숫자를 입력하세요 >> 50
UP

1부터 100사이의 랜덤한 숫자를 입력하세요 >> 75
UP

1부터 100사이의 랜덤한 숫자를 입력하세요 >> 88
UP

1부터 100사이의 랜덤한 숫자를 입력하세요 >> 95
DOWN

1부터 100사이의 랜덤한 숫자를 입력하세요 >> 92
DOWN

1부터 100사이의 랜덤한 숫자를 입력하세요 >> 90
UP

1부터 100사이의 랜덤한 숫자를 입력하세요 >> 91
정답입니다! 7번 만에 맞추셨습니다.

 

728x90
반응형

+ Recent posts