본문 바로가기
Programming Study/명품자바프로그래밍

[명품자바프로그래밍] 3장 실습문제(1)

by 푸고배 2017. 7. 8.

1.키보드로부터 임의의 정수를 입력받고 *을 출력하는 프로그램을 작성하라. 예를 들어, 5를 입력받았으면 그 결과는 다음과 같다.

 

<소스코드> Chapter3_1

import java.util.Scanner;

public class Chapter3_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print("임의의 정수를 입력하시오>>");
		Scanner sd = new Scanner(System.in);
		int num = sd.nextInt();
		for(int i=0;i<num;i++){
			for(int j=num-i;j>0;j--){
				System.out.print("*");
			}
			System.out.println();
		}
	}

}
s.next().charAt(0); // 한 글자만 입력받을 때 사용 
1. 임의의 정수(num)를 입력받는다.(Scanner 이용)

 

2. 입력받은 정수만큼 for문을 하나 돌린다. ①

 

3. ①번 for문안에 for문을 하나 더 돌린다. ②

 

4. ②번 for문안에 num-i의 개수만큼 *을 출력한다.

 

5. ①번 for문 끝에 줄바꿈을 해준다.

 

2. 키보드로부터 임의의 문자를 입력받고 그 문자보다 알파벳 순위가 낮은 모든 문자를 출력하는 프로그램을 작성하라. 예를 들어, 'e'를 입력받았으면 그 결과는 다음과 같다.

<소스코드> Chapter3_2

import java.util.Scanner;

public class Chapter3_2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print("알파벳 한 문자를 입력하시오>>");
		Scanner sd = new Scanner(System.in);
		char a = sd.next().charAt(0);
		
		int x = a-'a'+1;
		
		for(int i=0;i<x;i++){
			int k=0;
			for(int j=x-i;j>0;j--){
				System.out.print((char)('a'+k));
				k++;
			}
			System.out.println();
		}
	}

}
1. 알파벳 한 문자(a)를 입력받는다. (Scanner 이용)

 

2. 입력 받은 알파벳의 숫자(x)를 구한다. (ex. a는 1, f는 6)

 

3. 1번 문제의 알고리즘을 이용해서 for문을 돌린다.

 

4. *대신에 a에 +1을 더한 값을 출력한다.

 

3. 키보드로부터 0보다 큰 임의의 정수를 입력받고 이 정수를 이진수로 출력하고 이진수에 들어 있는 1의 개수를 출력하라.

 

<소스코드> Chapter3_3

import java.util.ArrayList;
import java.util.Scanner;

public class Chapter3_3 {

	public static void main(String[] args) {
        // TODO Auto-generated method stub
        int num;
        int count;
        ArrayList<Integer> array = new ArrayList<Integer>();
        while(true){
            System.out.print("0보다 큰 수를 입력하시오(종료:-1) : ");
            Scanner sc = new Scanner(System.in);
            count=0;
            num = sc.nextInt();
            if(num==-1){
                break;
            }
            if(num>0){
                for(int i=0;num>0;i++){
                    array.add(num%2);
                    if(num%2==1) {
                    	count++;
                    }
                    num /=2;
                }
                for(int i=array.size()-1;i>=0;i--){
                    System.out.print(array.get(i));
                }
            }
            System.out.println();
            System.out.println("1의 개수 : "+count+"개");
            array.clear();
             
        }
    }
}

ArrayList array = new ArrayList(); // 정수형만 다루는 ArrayList 생성

array.add(E element) // ArrayList의 맨 뒤에 element 추가

array.size() // ArrayList가 포함하는 요소의 개수 리턴

array.get(int index) // index 인덱스의 요소 리턴

1. 정수를 담을 수 있는 ArrayList를 하나 생성한다.  

 

2. 0보다 큰 임의의 정수(num)를 하나 입력받는다.(-1 입력시 종료)

 

3. num이 0보다 클 때 2진수 구하는 알고리즘을 적용해서 ArrayList에 담는다.

 

4. for문이 한번 돌 때마다 구한 숫자가 1이면 count를 하나씩 증가시킨다.

   (= 1의 개수 구하기)

 

5. ArrayList를 거꾸로 출력하면 구하고자하는 2진수가 나온다.

 

6. 다음 숫자의 연산을 위해서 ArrayList를 비운다.

 

4. 두 수를 입력받아 최대 공약수를 출력하는 프로그램을 작성하라.

 

<소스코드> Chapter3_4

import java.util.Scanner;

public class Chapter3_4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sd = new Scanner(System.in);
		int x = sd.nextInt();
		int y = sd.nextInt();
		int tmp;
		if(y==maxNum(x,y)){
			tmp=x;
			x=y;
			y=tmp;
		}
		tmp=x%y;
		while(tmp>0){
			x=y;
			y=tmp;
			tmp=x%y;
		}
		System.out.println(y);
		
	}
	public static int maxNum (int a, int b){
		if(a>b)
			return a;
		else
			return b;
	}

}

 

1. 두 개의 숫자를 입력받는다.

2. 둘 중 큰 수를 구한다.

3. 큰 수를 작은 수로 나눈 나머지를 구해 구한 나머지와 작은 수의 나머지를 구하기를 반복한다.

(나머지가 0이 될 때 까지)

(=유클리드 호제법을 이용해 최대공약수를 구한다.)

4. 구한 수가 최대 공약수가 된다.

 

5. 키보드로부터 정수를 10개 입력받아 배열에 저장하고 이 정수 중에서 3의 배수인 수만 골라 출력하는 프로그램을 작성하라.

 

<소스코드> Chapter3_5

import java.util.ArrayList;
import java.util.Scanner;

public class Chapter3_5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<Integer> array = new ArrayList<Integer>();
		Scanner sd = new Scanner(System.in);
		for(int i=0;i<10;i++){
			array.add(sd.nextInt());
		}
		for(int i=0;i<array.size();i++){
			if(array.get(i)%3==0){
				System.out.print(array.get(i)+" ");
			}
		}
	}

}
1. ArrayList를 하나 만든다.

 

2. for문을 사용하여 10개의 정수를 입력받고 ArrayList에 저장한다.

 

3. ArrayList에 추가한 수를 하나씩 꺼내서 3으로 나누어 떨어지는지 확인해본다.

   (이때 3으로 떨어지면 3의 배수이므로 출력한다.

 

6. 키보드로부터 정수를 10개 입력받아 배열에 저장하고 증가하는 순서로 정렬하고 이들을 출력하는 프로그램을 작성하라. 

 

<소스코드> Chapter3_6

import java.util.Scanner;

public class Chapter3_6 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int array[] = new int[10];
		Scanner sd = new Scanner(System.in);
		int tmp;
		for(int i=0;i<10;i++){
			array[i]=sd.nextInt();
		}
		for(int i=0;i<array.length;i++){
			for(int j=0;j<array.length-1;j++){
				if(array[j]>array[j+1]){
					tmp = array[j];
					array[j]=array[j+1];
					array[j+1]=tmp;
				}
			}
		}
		for(int i=0;i<array.length;i++){
			System.out.print(array[i]+" ");
		}
	}
}
1. 배열을 만들고 for문을 이용해 10개의 정수를 입력받아 생성한 배열에 10개의 정수를 저장한다.

2. 정렬해야할 데이터의 양이 많지 않으므로 구현하기 쉬운 버블정렬을 이용하여 정렬한다. 

 

참고자료 : 생능출판 명품 JAVA Programming

github 주소 : 

https://github.com/ch1517/First_Step/tree/master/Chapter3/Chapter3_Ex

반응형

댓글