[JAVA기초][반복문]

포키·2022년 10월 7일
0

국비과정

목록 보기
12/73

문제풀이

Quiz1. 369 게임을 만들어보라. (1~50까지 수행)

class Page128_3 {
	public static void main(String[] args) {
		for(int i = 1; i <= 50; i++){
			int one = i % 10;	// i의 일의 자리수
			int ten = i / 10;	// i의 십의 자리수

			boolean onef = one % 3 == 0 && one != 0;	//	i의 일의 자리가 3의 배수 && 0 아님
			boolean tenf = ten % 3 == 0 && ten != 0;	//	i의 십의 자리가 3의 배수 && 0 아님
			if(onef && tenf){
				System.out.print("짝짝");
			} else if (onef || tenf){
				System.out.print("짝");
			} else {
				System.out.print(i);
			}
			System.out.println();
		}
	}
}
  • 1의 자리수와 10의 자리수의 조건을 교차하여 적은 방식 (너무 복잡함💢)
class Page128_3 {
	public static void main(String[] args) {
		for(int num = 1; num <= 50; num++){
			boolean flag1 = false;
			boolean flag2 = false;

			int result = num % 10;
			if(result == 3 || result == 6 || result == 9){
				System.out.print("짝");
				flag1 = true;
			}
			result = num / 10;
			if(result == 3 || result == 6 || result == 9){
				System.out.print("짝");
				flag2 = true;
			}
			if (!(flag1 || flag2)){
				System.out.print(num);
			}
			System.out.println();
		}
	}
}
class Page128_3 {
	public static void main(String[] args) {
		for(int i = 1; i <= 50; i++){
			int result = i % 10;		// i의 일의 자리수
			int count = 0;
            
			if(result % 3 == 0 && result != 0){
				count++;
				System.out.print("짝");
			}
            result = i / 10			// i의 십의 자리수
			if(result % 3 == 0 && result != 0){
				count++;
				System.out.print("짝");
			}
			if(count == 0){
				System.out.print(i);
			}
			System.out.println();
		}
	}
}
  • 십의 자리수, 일의 자리수를 각각 두지 않고, 중간에 값을 바꾸어넣는 것으로 변수를 하나만 사용!!!
  • boolean 변수 flag1, flag2를 사용하거나, int 변수 count를 사용하는 것으로,
    조건을 단순 곱·덧셈화하여 간단하게 만드는 방식💘

Quiz2. 1부터 100사이 정수 중 3 또는 4의 배수의 합은?

class Page128_4 {
	public static void main(String[] args) {
		int sum = 0;
		for(int i = 1; i <= 100; i++){
			if (i % 3 == 0 || i % 4 == 0){
				sum += i;
			}
		}
		System.out.println(sum);
	}
}

Quiz3. 2개의 주사위를 던져 합이 6이 되는 경우의 수를 출력하시오.

class Page128_5 {
	public static void main(String[] args) {
		for (int i = 1; i <= 6; i++){
			for (int j = 1; j <= 6; j++){
				if(i + j == 6){
					System.out.printf("(%d,%d)", i, j);
					if(j != 1)
						System.out.print(" , ");
				} 
			}
		}
		System.out.println();
	}
}

  • 콤마 야매 처리법💦
class Page128_5 {
	public static void main(String[] args) {
		boolean isFirst = true;
		for (int i = 1; i <= 6; i++){
			for (int j = 1; j <= 6; j++){
				if(i + j == 6){
					if(isFirst){
						isFirst = false;
					} else {
						System.out.print(" , ");
					}
					System.out.printf("(%d,%d)", i, j);
				} 
			}
		}
		System.out.println();
	}
}
  • 첫값 처리의 정석💖
  • 마지막 콤마를 처리하기 -> 어렵다 (계산 전에 위치를 알 수 x) -> 첫번째 콤마를 처리하자
  • 첫값 처리하기: boolean 변수 isFirst를 생성하고, 첫번째 경우에만 true, 나머지 경우에 false가 되도록 if문 처리 (경로를 '첫번째'<->'나머지' 둘로 나누는 것!)

Quiz4. 일차방정식 3x + 10y = 100의 정수해 (0<=x,y<=10)

class Page128_6 {
	public static void main(String[] args) {
		for (int x = 0; x <= 10; x++){
			for (int y = 0; y <= 10; y++){
				if(3 * x + 10 * y == 100){
					System.out.printf("(%d,%d)\n", x, y);
				}
			}
		}
	}
}

Quiz5. 2부터 100 사이의 모든 소수 구하기

class Page129_7 {
	public static void main(String[] args) {
		System.out.println("2부터 100 사이의 모든 소수: ");
		for(int i = 2; i <= 100; i++){
			int count = 0;
			for(int j = 2; j <= i - 1; j++){
				if(i % j == 0){
					count++;
				} 
			}
			if(count == 0){
				System.out.println(i);
			} 
		}
		System.out.println();
	}
}
  • for문 중첩 (나눠질 수, 나누는 수) + 변수 (나눠짐 여부 저장) + 출력
class Page129_7 {
	public static void main(String[] args) {
    	int count = 0;
		System.out.print("2부터 100 사이의 모든 소수: ");
		for(int num = 2; num <= 100; num++){
			boolean isPrime = true;
			for(int divider = 2; divider <= num / 2 && isPrime; divider++){
				if(num % divider == 0){			// num이 숫자로 나눠지는가?
					isPrime = false;			// num은 소수가 아니다
				}
                count++;
			}									// 나누기 끝
			if(isPrime){						// num이 끝까지 나눠지지 않았다면 (isPrime = true라면)
				System.out.print(num + " ");	// num을 출력하세요
			}
		}
        System.out.println(count);
	}
}
  • 리팩토링: 나눠졌다면 반복 중단 + 숫자의 1/2 이상으로는 나눠지지 않음
	for(int divider = 2; divider <= num / 2 && isPrime; divider++)

profile
welcome

0개의 댓글