본문 바로가기

programming/Gukbi

국비 교육 7일차 - 2차 for문

728x90
반응형

이제 노는요일 없이 정말 주5일 내내 빡세게 달려야 한다. 

 

그동안 솔직히 대충 아는 내용에 복습을 계속해서 좀 지겨웠는데, 오늘 부터 모르는 내용이 하나씩 등장했다. 

우선 가장 먼저는 2차 for문

 

for문 안에 for문이 들어가 있는 형태이다. 

 

그렇기 때문에 조건역시 2번 걸어줘야 한다. 

형식은 아래와 같다.

/*
 *   이중 반복문 (중첩 for)
 *   형식)
 *        가로 : 이차 for
 *        세로 : 일차 for 
 *        
 *        2*1=2  3*1=3 4*1=4 5*1=5 .... 9*1=9
 *        --
 *        --
 *        --
 *        --
 *        2*9=18 3*9=27 -----
 *                   ↗ false: 종료
 *             1  →  2  ← 4
 *        for(초기값;조건식;증가식) ==> 줄수  ===> 추천
 *        {               ↗
 *                   ↓ true
 *                   3
 *          ==========================================
 *                1 →  2  ← 4
 *           for(초기값;조건식;증가식)==> 실제 반복내용 수행 
 *           {               ↗
 *                    ↓ true
 *                    3
 *               반복수행 문장 
 *           }
 *          ==========================================
 *           다음줄에 출력 
 *        }
 */
public class 이중반복문_for {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        for(int i=1;i<=5;i++)
        {
        	for(int j=1;j<=5;j++)
        	{
        		System.out.println("i="+i+",j="+j);
        		// i=1  => j=1,2,3,4,5
        		// i=2  => j=1,2,3,4,5
        		// i=3  => j=1,2,3,4,5
        		// i=4  => j=1,2,3,4,5
        		// i=5  => j=1,2,3,4,5
        	}
        }
	}

}


세로: 1차 for문

가로: 2차 for문

 

이것만 잘 외워도 헷갈리지는 않을것 같은데 수업 들을때는 확확 지나가서 좀 어렵게 느껴졌다. 

 

코드를 따라쓰고 끝내는게 아니라 나도 쓸 수 있는지 다시 확인을 해봐야 하기 때문에

지금 한 번 써보고 다시 적도록 하겠다.  

 

public class 구구단연습 {

	public static void main(String[] args) {
		
		for(int i =1; i<=9; i++) 
		{
			
			for(int j=2; j<=9; j++) 
			{
				System.out.printf("%d * %d = %d \t", j,i,j*i);
			}
		}

	}

}

엄.. 뭔가 엄청.. 쉽게 나왔는데? 잘 이해했나보다...

 

 

그럼 별찍기를 해보겠다

코테에 아주 쉬운 난이도 문제로 나오는거 같던데 (너무 쉬워서 아닐 수도 있음)

public class 별찍기연습 {

	public static void main(String[] args) {
		/*
		 *  ★
		 * 	★★
		 * 	★★★
		 * 	★★★★
		 * 
		 * 		i 	j
		 * 	   줄수  별표
		 * 		1	1
		 * 		2	2
		 * 		3	3
		 * 		4	4
		 * 		
		 */
			
		for(int i=1; i<=4; i++) {
				
			for(int j=1; j<=i; j++) {
				System.out.print("★");
			}
			System.out.println();
		}
		
	}
	

}

하아.. 이게 뭐라고 어렵네 ^^

일단 가장 중요한건 줄수, 별수를 파악해서 어떻게 증가시켜줄지 생각을 먼저 하는거다

그리고 한칸 띄어 주는것도 중요하다. 

 

public class 별찍기연습 {

	public static void main(String[] args) {
		/*
		 * 	★★★★
		 * 	★★★
		 * 	★★
		 * 	★
		 * 
		 * 		줄수 	별표
		 * 		i 	j
		 * 		1 	4
		 * 		2	3
		 * 		3 	2
		 * 		4	1 ==> i+j=5 ==> j>=5-i
		 */
		
		for(int i =1; i<=4; i++) {
			
			for(int j=4; j>=5-i; j--) {
				System.out.print("*");
			}
			System.out.println();
		}
		
	}
	

거꾸로 찍어줬다. 수업때 배운 예제 코드를 보니 다르게 썼던데 혼자 풀어볼때 다르게 써서 같은 값을 냈으면 잘한거 같다. 

 

public class 별찍기연습 {

	public static void main(String[] args) {
	
		/*
		 * 	★★★★★★★★★★ (10개)
		 * 	★★★★★★★★★★
		 *  ★★★★★★★★★★
		 *  ★★★★★★★★★★
		 *  ★★★★★★★★★★
		 */
		
		for(int i = 1; i<=5; i++) {
			for(int j = 1; j<=10; j++) {
				System.out.print("★");
			}
				
			System.out.println();
		}
		
		
		
	}
}

잘 나오고도 찝찝한 이 기분.. 왜 이렇게 나오지 싶어서 위에 쓴 코드랑 다시 비교해봤다. 

머저리같애.. 스스로가...

 

다음 예제는 반드시.. 제대로 이해하고 풀겠다

 

아놔 ㅋㅋㅋㅋ 다른 문제 풀려고 쓴 코드가 그 다음 예제랑 맞아서 그냥 또 바꿔서 써본다.

public class 별찍기연습 {

	public static void main(String[] args) {
	
		/*
		 * 	ABCD
		 *  ABCD
		 *  ABCD
		 *  ABCD
		 * 
		 */
		
		for(int i=1; i<=4; i++) {
			for(char j='A'; j<='D'; j++) {
				System.out.print(j);
			}
			System.out.println();
		}
		
	}
}

 

다시...

다음 예제

 

public class 별찍기연습 {

	public static void main(String[] args) {
	
		/*
		 * 	ABCD
		 *  EFGH
		 *  IJKL
		 *  MNOP
		 * 
		 */
		
		char c ='A';
		for(int i=1; i<=4; i++) {
			for(char j=1; j<=4; j++) {
				System.out.print(c++);
			}
			System.out.println();
		}
		
	}
}

변수를 먼저 설정을 해주고, 그 변수에 하나씩 더해주는 방법을 써야했다.

위의 코드는 for문 자체를 char로 돌린 기이한 ㅋㅋ 코드가 됐는데 어쨌든 둘다 맞는 방법이니까.

 

public class 별찍기연습 {

	public static void main(String[] args) {
	
		/*	  j=1234	
		 * 	i=1	1###
		 * 	i=2	#2##
		 * 	i=3	##3#
		 * 	i=4 ###4
		 * 	======
		 * 	세로 : 4줄 => for(int i=1; i<=4; i++) => 1차 for문
		 * 	가로 : 4줄 => for(int j=1; j<=4; j++) => 2차 for문
		 * 	p.156
		 */
		
		
		for(int i=1; i<=4; i++) {
			for(int j=1; j<=4; j++) {
				if(i==j) {
					System.out.print(i);
				}
				else {
					System.out.print("#");
				}
			}
			System.out.println();
		}
	}
}

 

이중 for문에 if, else 조건문을 활용하면 만들 수 있는 모양

확실히 이쯤 하면 완벽히는 아니어도 대충 이해가 가야한다. 

 

하 ㅋㅋㅋㅋㅋㅋㅋ

찍어보고 어이없고 웃겨서 그냥 캡쳐해봤다.

이딴 모양은 또 첨보네

 

public static void main(String[] args) {
	
		/*
		 * 		 *
		 * 		**
		 * 	   ***
		 * 	  ****
		 * 	  ====================	
		 * 		i	j 	k		i,j 				i,k
		 * 		줄수 공백 별표		
		 * 		 1	3	1		i+j=4 ==> j=4-i		i=k ==> k=i
		 * 		 2	2	2		
		 * 		 3	1	3
		 * 		 4	0	4
		 *   =====================
		 *
		 */		
		
		for(int i=1; i<=4; i++) {
			for(int j=1; j<=4-i; j++) {
				System.out.print(" ");
			}
			for(int k=1; k<=i; k++) {
				System.out.print("★");
			}
			System.out.println();
		}
	}

제대로 찍혔다 이번에는

이제 마지막 문제

 

public static void main(String[] args) {
	
		/*
		 * 		
		 * 	  ****
		 * 	   ***
		 * 		**
		 * 		 *
		 * 
		 * 		i	j 	k			i+k=5 ==> k=5-i
		 * 		줄수 공백 별표			j=i-1
		 * 		1	0	4
		 * 		2 	1	3
		 * 		3	2 	2
		 * 		4	3	1
		 */		
		
		for(int i=1; i<=4; i++) {
			for(int j=0; j<=i-1; j++) {
				System.out.print(" ");
			}
			for(int k=1; k<=5-i; k++) {
				System.out.print("★");
			}
			System.out.println();
		}
	}

내가 나중에 이걸 이해할 수 있을까?

제발 그러기를 바란다...

 

 

728x90
반응형

'programming > Gukbi' 카테고리의 다른 글

국비 교육 9일차 - 배열 활용  (2) 2021.01.06
국비 교육 8일차 - 배열  (0) 2021.01.05
국비 교육 6일차 - 반복문  (0) 2020.12.31
국비 교육 5일차 - 조건문  (0) 2020.12.31
국비 교육 4일차 - 연산자, 제어문  (0) 2020.12.28