본문 바로가기

JAVA/명품 자바 프로그래밍

[교수님 퀴즈] 자바 2-3장

728x90

1. 1부터 100까지 짝수의 합을 구하기

public class Pro1 {
	public static void main(String[] args) {
		int sum=0;
		
		for(int i=1 ; i<=100 ; i++) {
			if(i%2==0) {
				sum+=i;
			}
		}
		
		System.out.println("100이하 짝수의 합 : "+sum);	
	}
}

 

 

 


 

 

 

2. 다음과 같이 출력하는 프로그램 짜기

1

12

123

1234

public class Pro2 {
	public static void main(String[] args) {
		for(int i=1; i<=4; i++) {
			for(int j=1; j<=i; j++) 
				System.out.print(j);
			System.out.println();
		}
	}
}

 

 


 

 

 

3. 구구단 3단만 출력하기 

public class Pro3 {
	public static void main(String[] args) {
		for(int i=3 ; i<=9 ; i+=3) {
			for(int j=1 ; j<=9 ; j++) 
				System.out.println(i + " * " + j+" = "+i*j);
			System.out.println();
		}
	}
}

 

 

 


 

 

 

4. 정수 하나를 입력 받아 반복문을 이용하여 2진수 출력하기

import java.util.Scanner;
public class pro4 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		
		System.out.print("정수를 입력하세요>>");
		int n=s.nextInt();
		String result="";
		
		while(true) {
			int m = n%2;
			result=m+result;
			n=n/2;
			if(n<2)
				break;
		}
		result=n+result;
		System.out.println(result);
	}
}

 이건 내가 못 푼 문제. 교수님이 너무 평화롭게 풀어버리셔서 머리 쥐어뜯던 나는 그저 감탄..

 

 어려웠던게 나머지 2를 저장하면 출력할 때 거꾸로 출력되는데 이걸 어떻게 저장할까 혹은 어떻게 출력할까에 관한 고민을 많이 했다. 배열에 넣어서 역순 출력 할 생각까지 햇는데. 그냥 문자열 저장이라니... 계속 자료형에 집착하다보니 저렇게 할 수도 있다는 것이 놀랍다. 

 

while(n>1) {
			result=(n%2)+result;
			n=n/2;
		}

 while문은 이렇게 줄일 수도 잇다. 

 

 

 


 

 

 

5. 숫자 n을 입력 받고 2부터 n까지 소수 출력하기

import java.util.Scanner;

public class pro5 {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);

		System.out.print("정수를 입력하세요>>");
		int n = s.nextInt();
		int count=0;
		
		if(n<=1)  //n==0 || n==1
			System.out.println("소수가 없습니다.");
		else {
			for (int i = 2; i <= n; i++) {
				for(int j=1; j<=i; j++) {
					if(i%j==0)
						count++;
				}
				if(count==2)
					System.out.println(i);
				
				count=0;
		}
		
		s.close();

		}
	}
}

 소수란 1과 자기 자신의 숫자 이외의 숫자로 나눠지지 않는 수를 말한다. 예를 들어 4는 1과 2, 4로 나눠지므로 소수가 아니다. 7은 1과 7로만 나눠지므로 소수다. 

 

 이런 속성을 이용, 이중 포문을 활용하여 1에서 자기 자신까지 나눠서 0이 나오는 횟수를 count 변수에 저장한다. 소수의 경우 1과 자기자신 단 2번만 완전히 나눠 떨어질테니까, 그 횟수 2번인 경우만 출력하고 다시 count를 0으로 초기화 해준다. (다음 수가 소수인지 아닌지 판별하기 위해서)

 

 

 


 

 

 

 

6. 피보나치 수열

public class pro6 {
	public static void main(String[] args) {
		int n1=0, n2=1;
		int x;
		
		for(int i=0; i<10; i++) {
			if(i==0)
				System.out.println(n1);
			else if(i==1)
				System.out.println(n2);
			else {
				x=n1+n2;
				System.out.println(x);
				n1=n2;
				n2=x;
			}
				
		}
		
	}
}

  피보나치 수열은 첫번째 수와 두번째 수의 합으로 세번째 수를 나타내고. 그렇게 쭉 합산하는 수열로 알고 잇따. 이전에 c나 python 공부할 때 자주 접하던 문제라서 어려움없이 풀었다. 

 

 

 문제 풀 때 대충 그렸던 피보나치 수열 메커니즘?이다. x의 값은 어차피 n1(첫번째 수)과 n2(두번째 수)의 합이므로 n1과 n2만 잘 저장하면 문제는 정말 쉽다. 

 

 


 

 

 

7. 시작 수 a,b와 출력할 개수를 n으로 입력받아 피보나치 수열 출력하기

 

import java.util.Scanner;

public class pro7 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		int n, a, b;
		int count=0, x=0;
		
		System.out.println("몇 개>>");
		n=s.nextInt();
		
		System.out.println("시작수>>");
		a=s.nextInt();
		b=s.nextInt();
		
		while(count<n) {
			if(count==0) {
				System.out.println(a);
				count++;
			}else if(count==1) {
				System.out.println(b);
				count++;
			}else {
				x=a+b;
				System.out.println(x);
				a=b;
				b=x;
				count++;
			}
			
		}
		
		s.close();
	}
}

 

 위와 동일한 코드인데 이번엔 시작 수 2개를 사용자에게 지정하게 한다. 이렇게 해도 어차피 피보나치의 기본 개념은 처음 두 수의 합산으로 이어나가는 수열이다. 

 

 

 


 

 

8. * 피라미드 출력하기 

import java.util.Scanner;
public class pro8 {
	public static void main(String[] args) {
		Scanner s= new Scanner(System.in);
		
		System.out.print("정수>>");
		int n=s.nextInt();
		
		for(int i=0; i<n; i++) {
			//공백
			for(int k=0; k<n-i; k++)
				System.out.print(" ");
			
			//*
			for(int j=0; j<i*2+1; j++) 
				System.out.print("*");
			
			System.out.println();
		}
	}
}

 이거 c공부할 때 엄청 했던건데 그새 까먹어서 못 풀었던 문제... 

 

 일단 첫번째 포문은 행의 수를 의미한다. 

 

 두번째 포문은 공백을 출력할 것이다. 그림을 보면 알다시피 행이 5개일 때 4개, 4개일 때 3개로 행의 개수에서 -1한 값과 동일해서 조건을 k<n-i로 넣어주었다. 

 

 세번째 포문은 별을 출력한다. 별은 첫번째 행에서 1개, 두번째 행에서 3, 5, 7 이렇게 홀수로 늘어난다. 행과의 관계성을 따지다가 놓쳤는데, i는 0부터 시작하니까 i*2+1하면 간단하게 해결된다.