[java] 반복문 문제 풀기 ③ 구구단, 이중 for문 문자 출력, 팩토리얼 수 구하기, 소수 구하기

심심이·2024년 1월 28일
0

java

목록 보기
22/46

1. 구구단 출력하기

요구 사항 >

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

문제 풀이 >

for (int num = 1; num <= 9; num++) {
	for(int dan = 2; dan<=9; dan++) {
		System.out.print(dan + "*" + num + "=" +(dan * num) + "\t");
	}
	System.out.println("");
}
// 읽을 때 세로줄 말고 가로줄로 읽으면 도움이 된다(dan은 안쪽에서 증가, 곱하는 숫자는 내부 for문이 끝나면 prinln("")뒤 ++

요구 사항 >

=== 구구단 4단씩 끊기 ===
2*1=2	3*1=3	4*1=4	5*1=5	
2*2=4	3*2=6	4*2=8	5*2=10	
2*3=6	3*3=9	4*3=12	5*3=15	
2*4=8	3*4=12	4*4=16	5*4=20	
2*5=10	3*5=15	4*5=20	5*5=25	
2*6=12	3*6=18	4*6=24	5*6=30	
2*7=14	3*7=21	4*7=28	5*7=35	
2*8=16	3*8=24	4*8=32	5*8=40	
2*9=18	3*9=27	4*9=36	5*9=45	

6*1=6	7*1=7	8*1=8	9*1=9	
6*2=12	7*2=14	8*2=16	9*2=18	
6*3=18	7*3=21	8*3=24	9*3=27	
6*4=24	7*4=28	8*4=32	9*4=36	
6*5=30	7*5=35	8*5=40	9*5=45	
6*6=36	7*6=42	8*6=48	9*6=54	
6*7=42	7*7=49	8*7=56	9*7=63	
6*8=48	7*8=56	8*8=64	9*8=72	
6*9=54	7*9=63	8*9=72	9*9=81	

문제 풀이 >

2. 이중 for문 문자 출력

요구 사항 >


abcdefg
hijklmn
opqrstu
~~~~~~~~~~~~~~~~~~~~~~~

[0,0][0,1][0,2]
[1,0][1,1][1,2]
[3,0][3,1][3,2]


문제 풀이 >

for (char i = 'a'; i<='u'; i++) {
	System.out.print(i);
	if(i == 'g' || i == 'n' || i == 'u') {
		System.out.println("");
	}
}  

/*
abcdefg
hijklmn
opqrstu
*/

for(int i= 0; i<=3; i++) {
	if(i == 2) continue;
	for (int j=0; j<=2; j++) {
		System.out.print("[" + i + "," + j + "]");
	}
	System.out.println("");
}

/*
[0,0][0,1][0,2]
[1,0][1,1][1,2]
[3,0][3,1][3,2]
*/
        

3. 팩토리얼 구하기

요구 사항 >

/*
		   ▣ 알고 싶은 팩토리얼 수 입력 => 5엔터
		   >> 결과 : 5! = 120 
		   >> 또 할래?[Y/N] => y
		   
		   5! ==> 5*4*3*2*1
		   7! ==> 7*6*5*4*3*2*1
		   
		   ▣ 알고 싶은 팩토리얼 수 입력 => 0엔터
		   >> [경고] 자연수만 입력하세요!!
		   
		   ▣ 알고 싶은 팩토리얼 수 입력 => -5엔터
		   >> [경고] 자연수만 입력하세요!!
		   
		   ▣ 알고 싶은 팩토리얼 수 입력 => 1.25엔터
		   >> [경고] 정수만 입력하세요!!
		   
		   ▣ 알고 싶은 팩토리얼 수 입력 => 똘똘이엔터
		   >> [경고] 정수만 입력하세요!!
		   
		   ▣ 알고 싶은 팩토리얼 수 입력 => 4엔터
		   >> 결과 : 4! = 24
		   >> 또 할래?[Y/N] => s엔터
		   >> [경고] Y 또는 N 만 입력하세요!!
		   >> 또 할래?[Y/N] => n엔터
		   
		   >>> 프로그램 종료 <<<

문제 풀이 >

while문으로 풀었을 경우>

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		outer:
		while (true) {
			try {
				System.out.println("▣ 알고 싶은 팩토리얼 수 입력 =>");
				int num = Integer.parseInt(sc.nextLine());

				if(num <= 0) {
					System.out.println(">> [경고] 자연수만 입력하세요!");
					continue;
				} // 0이나 음수를 입력했을 경우 다시 시작

				int result = 1; //결과 입력
				for (int i = 1; i<=num; i++) {
					 result *= i;
				}
				System.out.println(num + "!=" + result);
				String select = "";
				while (true) {
					System.out.println("또 할래? [Y/N]");
					select = sc.nextLine();

					if (select.equals("y") || select.equals("Y")) {
						continue outer;
					} else if (select.equals("n") || select.equals("N")) {
						break;
					} else {
						System.out.println("제대로 된 값을 입력하세요.");
					}
				}
				sc.close();
				break;
			} catch (NumberFormatException e) {
				System.out.println(">> [경고] 정수만 입력하세요!!");
			}
		}

	}// end of main()-------------------------------

do-while문으로 풀었을 경우>


	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		outer:
		while (true) {
			try {
				System.out.println("▣ 알고 싶은 팩토리얼 수 입력 =>");
				int num = Integer.parseInt(sc.nextLine());

				if(num <= 0) {
					System.out.println(">> [경고] 자연수만 입력하세요!");
					continue;
				} // 0이나 음수를 입력했을 경우 다시 시작

				int result = 1; //결과 입력
				for (int i = 1; i<=num; i++) {
					 result *= i;
				}
				System.out.println(num + "!=" + result);
				String select = "";
				do {
					System.out.println("또 할래? [Y/N]");
					select = sc.nextLine();

					if("y".equalsIgnoreCase(select)) { //equalsIgnoreCase()는 대소문자를 구분하지 않고 문자열 비교
						break;
					} else if("n".equalsIgnoreCase(select)) {
						sc.close();
						break outer;
					} else {
						System.out.println(">>[경고] Y 또는 N만 입력하세요!!");
					}
				} while (true);
			} catch (NumberFormatException e) {
				System.out.println(">> [경고] 정수만 입력하세요!!");
			}
		}
	}

리팩토링 >

while (true) {
	System.out.println("또 할래? [Y/N]");
	select = sc.nextLine();

	if (select.equals("y") || select.equals("Y")) {
		continue outer;
	} else if (select.equals("n") || select.equals("N")) {
		break;
	} else {
		System.out.println("제대로 된 값을 입력하세요.");
	}
}
/////////// 아래처럼 변화시킬 수 있다.
while (true) {
	System.out.println("또 할래? [Y/N]");
	select = sc.nextLine();

	if("y".equalsIgnoreCase(select)) { //equalsIgnoreCase()는 대소문자를 구분하지 않고 문자열 비교
		continue outer;
	} else if("n".equalsIgnoreCase(select)) {
		break;
	} else {
		System.out.println(">>[경고] Y 또는 N만 입력하세요!!");
	}
}
           

! 반복문 앞에 '라벨명:'을 붙이면 추후에 다시 해당 부분으로 돌아가고 싶을 때 'continue 라벨명;'을 입력하여 해당 부분으로 돌아갈 수 있고,
break를 통해 아예 해당 반복문을 나와버릴 수도 있다.(다시 시작하지 않음)

4. 소수 구하기

요구 사항 >

	/*
		  >>>>> 실행결과 <<<<<
		  
		  ▷시작 자연수 : 1엔터
		  ▷끝 자연수 : 10엔터 
		  1 부터 10 까지의 소수는?
		  2,3,5,7
		  1부터 10 까지의 소수의 개수? 4개  
		  1부터 10 까지의 소수들의 합? 17 
		  
		  === 프로그램 종료 ===
		  
		  >>>>> 실행결과 <<<<<
		  
		  ▷시작 자연수 : 1엔터
		  ▷끝 자연수 : 똘똘이엔터 
		  >> [경고] 자연수만 입력하세요!! 
		  
		  ▷시작 자연수 : 1엔터
		  ▷끝 자연수 : 20엔터 
		  1 부터 20 까지의 소수는?
		  2,3,5,7,11,13,17,19
		  1부터 20 까지의 소수의 개수? 8개  
		  1부터 20 까지의 소수들의 합? 77 
		  
		  === 프로그램 종료 ===
		        
	*/			

소수란?

1과 자기 자신밖에 나누어지지 않는 1 이외의 정수
// 예> 1 부터 10까지의 소수를 나타내면
// 2%2 ==> 0 | 2 는 소수
// 3%3 ==> 0 | 3 는 소수
// 4%2 ==> 0 | 4 는 소수가 아님
// 5%5 ==> 0 | 5 는 소수

문제 풀이 >

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (true) {
			try {

			System.out.println("▷시작 자연수 :");
			int num1 = Integer.parseInt(sc.nextLine());
			if (num1 <= 0) {
				System.out.println("자연수만 입력하세요!!");
				continue;
			}

			System.out.println("▷끝 자연수 : ");
			int num2 = Integer.parseInt(sc.nextLine());
			if (num2 <= 0) {
				System.out.println("자연수만 입력하세요!!");
				continue;
			}

			//1과 자기 자신으로 나눠지면 소수
			int primeSum = 0;//소수의 합
			int primeNumCount = 0;
			String primeNum = "";
			for (int i = num1; i <= num2; i++) {//처음 - 마지막까지 체크
				boolean isPrime = true; //소수인지 아닌지 검사하는 boolean 
				if (i == 1) {
					continue;
				} //1은 검사할 필요가 없다. 
				for (int j = 2; j < i; j++) { //자기자신의 숫자가 되기 바로 전숫자까지 돌림
					if (i % j == 0) {
						isPrime = false;
						break; //소수가 아니다.
					}
				}
				if (isPrime) {
					primeSum += i;
					primeNumCount++; //소수 개수 더함
					String add = (primeNumCount == 1) ? "" : ","; //소수 개수 1일때는 "," 넣지 않음
					primeNum += add + i; //소수 문자열에 더함
				}
			}

			System.out.println(num1 + "부터" + num2 + "까지의 소수는 :" + primeNum);
			System.out.println(num1 + "부터" + num2 + "까지의 소수의 개수 :" + primeNumCount);
			System.out.println(num1 + "부터" + num2 + "까지의 소수의 합 :" + primeSum);
		} catch (NumberFormatException e) {
				System.out.println("자연수만 입력하세요!");
				continue;
			}
			sc.close();
			break;
		}
	}// end of main()------------------------------------

마지막 문제 ,<- 문제와 boolean을 생각못해서 꽤 헤맸다..ㅠㅠ
다양한 방식으로 풀어보는게 중요한 듯하다

profile
개발하는 심심이

0개의 댓글

관련 채용 정보