문제풀이/일일연습문제

일일문제 : 5번째- 221219 [12-3-월] - 함수화 / 피라미드

Mo_bi!e 2022. 12. 19. 14:25

[8번]

1. 문제설명

:  제어구조 중첩 + 다차원 배열 + 배열+함수  문제

 

// 7번 문제를 함수를 이용하여 코드를 나누어 만들어보시오.

2. 나의 해답

package T221219;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;

public class test8 {
	
	
	static void print_Array (int [][] map) {

		for(int j = 0 ; j < map.length; j++) {
			for(int i = 0 ; i< map[j].length ; i++) 
				 System.out.print(map[j][i]);
				
		System.out.println();
		
	}}
	
	static void print_Array (char [][] map) {

		for(int j = 0 ; j < map.length; j++) {
			for(int i = 0 ; i< map[j].length ; i++) 
				 System.out.print(map[j][i]);
				
		System.out.println();
		
	}}
	
	static void  load_Array(int [][]map) throws IOException {
		
		{
		    // 코드를 작성하는 공간
			FileInputStream fis = new FileInputStream("res/map.txt");
			Scanner scan = new Scanner(fis);
			 
			for(int j = 0 ; j < map.length; j++) {
				String mapLine= scan.nextLine();
				for(int i = 0 ; i< map[j].length ; i++) {
					String[] temp = mapLine.split("");
					map[j][i] = Integer.parseInt(temp[i]);
				}
			}
			
		    System.out.println("map 데이터 로드 완료");
		    print_Array(map);
		    
		    scan.close();
		    fis.close();
		}
		
	}
	
	static void make_stone(char [][] W_stone, char [][] B_stone ) {
			
			// 돌 커스터마이징
			//0 일때
			W_stone[0][0] = '┌';
			W_stone[0][1] = '┐';
			W_stone[1][0] = '└';
			W_stone[1][1] = '┘';
			
			//1 일때
			B_stone[0][0] = '▩';
			B_stone[0][1] = '▩';
			B_stone[1][0] = '▩';
			B_stone[1][1] = '▩';
					
			print_Array(W_stone);
			print_Array(B_stone);
			System.out.println("흑돌,백돌 완료");
	}
	
	static void trans_location(int [][]map , char[][]board) {
		
		for(int j = 0 ; j < map.length ; j++) {
			for(int i = 0 ; i< map[j].length ; i++) 
				if( map[j][i] == 1) { 
					board[j*2][i * 2] = 'B';
				}
				else {
					board[j*2][i * 2] = 'W';	
				}
			}
		
		System.out.println("위치 이식완료");
		print_Array(board);
		
	}
	
	static void draw_board(int [][]map, char [][] W_stone, char[][] B_stone ,char [][]board){
		
		for(int j = 0; j < map.length; j++)
			for(int i = 0 ; i < map[j].length ; i++) {
				
				if(board[j*2][i*2] == 'W') {
					board[j *2][i *2] =  W_stone[0][0];
					board[j *2][i *2 +1] =  W_stone[0][1];
					board[j *2 +1][i *2] =  W_stone[1][0];
					board[j *2 +1][i *2+1] =  W_stone[1][1];
				}
				else if(board[j*2][i*2] == 'B') {
					board[j *2][i *2] =  B_stone[0][0];
					board[j *2][i *2 +1] =  B_stone[0][1];
					board[j *2 +1][i *2] =  B_stone[1][0];
					board[j *2 +1][i *2+1] =  B_stone[1][1];
				}
								
			}
		System.out.println("돌 이식 여부");
	    print_Array(board);
		
	}
	
	
	public static void main(String[] args) throws IOException {

		int [][] map = new int [3][5];
		char [][]  board = new char [6][10];

		// 3. res/map.txt에서 읽은 데이터로 map 배열을 채우시오.
		load_Array(map);
		
		char [][] W_stone = new char [2][2];
		char [][] B_stone = new char [2][2];
		
		make_stone(W_stone, B_stone);
		
		trans_location(map, board);
		
		draw_board(map ,W_stone, B_stone,board);
		
			
	    System.out.println("board 그리기 완료");

		// 5. board 배열을 화면에 출력하는 코드를 작성하시오.

			print_Array(board);
		    System.out.println("board 출력 완료");
	}
}

 

3. 정답 코드

 

4. 보충 및 회고 

(1) 보충

 

 

(2) 회고 : 문제풀이과정에서 어떻게 접근하려고했는지 (접근방법) + 어려움이 있었는데 해결했다.

큰 어려움은 없었는데 배열과같이 참조형변수는 main함수에 넣어서 지속적으로 이용하는 것이 바람직하다고 볼 수있다.

 

 


[9번]

1. 문제설명

제어구조 중첩 + 수학  문제

// 1. 다음 한문장을 반복해서 다음과 같은 출력이 가능하도록 하는 코드를 작성하시오.

System.out.printf(“%c”, ‘┼’); 또는 System.out.printf(“%c”, ‘○’);

 

○┼┼┼┼┼┼┼┼┼

┼○┼┼┼┼┼┼┼┼

┼┼○┼┼┼┼┼┼┼

┼┼┼○┼┼┼┼┼┼

┼┼┼┼○┼┼┼┼┼

┼┼┼┼┼○┼┼┼┼

┼┼┼┼┼┼○┼┼┼

┼┼┼┼┼┼┼○┼┼

┼┼┼┼┼┼┼┼○┼

┼┼┼┼┼┼┼┼┼○

 

{

     // 코드를 작성하는 공간

 

    

 

    System.out.println(“1번 과제 출력 완료”);

}

 

// 2. 위의 답을 복사해서 다음과 같은 출력이 가능하도록 코드를 수정하시오.

○┼┼┼┼┼┼┼┼┼○

┼○┼┼┼┼┼┼┼○┼

┼┼○┼┼┼┼┼○┼┼

┼┼┼○┼┼┼○┼┼┼

┼┼┼┼○┼○┼┼┼┼

┼┼┼┼┼○┼┼┼┼┼

┼┼┼┼○┼○┼┼┼┼

┼┼┼○┼┼┼○┼┼┼

┼┼○┼┼┼┼┼○┼┼

┼○┼┼┼┼┼┼┼○┼

○┼┼┼┼┼┼┼┼┼○

 

{

     // 코드를 작성하는 공간

 

    

 

    System.out.println(“2번 과제 출력 완료”);

}



// 3. 위의 답을 복사해서 다음과 같은 출력이 가능하도록 코드를 수정하시오.

○┼┼┼┼┼┼┼┼┼○

┼○┼┼┼┼┼┼┼○┼

┼┼○┼┼┼┼┼○┼┼

┼┼┼○┼┼┼○┼┼┼

┼┼┼┼○┼○┼┼┼┼

┼┼┼┼┼○┼┼┼┼┼

┼┼┼┼○○○┼┼┼┼

┼┼┼○○○○○┼┼┼

┼┼○○○○○○○┼┼

┼○○○○○○○○○┼

○○○○○○○○○○○

 

{

     // 코드를 작성하는 공간

 

    

 

    System.out.println(“3번 과제 출력 완료”);

}

2. 나의 해답

package T221219;

public class test9 {
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
//		char [][] board = new char[10][10] ;
		
		// 1. 다음 한문장을 반복해서 다음과 같은 출력이 가능하도록 하는 코드를 작성하시오.
//		System.out.printf(“%c”, ‘┼’); 또는 System.out.printf(“%c”, ‘○’);
//
//		○┼┼┼┼┼┼┼┼┼
//		┼○┼┼┼┼┼┼┼┼
//		┼┼○┼┼┼┼┼┼┼
//		┼┼┼○┼┼┼┼┼┼
//		┼┼┼┼○┼┼┼┼┼
//		┼┼┼┼┼○┼┼┼┼
//		┼┼┼┼┼┼○┼┼┼
//		┼┼┼┼┼┼┼○┼┼
//		┼┼┼┼┼┼┼┼○┼
//		┼┼┼┼┼┼┼┼┼○
		
	{
		for(int i = 0 ; i < 10 ; i ++) { //y축
			for(int j = 0 ; j < 10 ; j ++)  //x축
				if(i == j) 
					System.out.printf("%c", '○');
				else
					System.out.printf("%c", '┼');
			
			System.out.println();
		}
	    System.out.println("1번 과제 출력 완료");
	    System.out.println();
	}

	// 2. 위의 답을 복사해서 다음과 같은 출력이 가능하도록 코드를 수정하시오.
//	○┼┼┼┼┼┼┼┼┼○
//	┼○┼┼┼┼┼┼┼○┼
//	┼┼○┼┼┼┼┼○┼┼
//	┼┼┼○┼┼┼○┼┼┼
//	┼┼┼┼○┼○┼┼┼┼
//	┼┼┼┼┼○┼┼┼┼┼
//	┼┼┼┼○┼○┼┼┼┼
//	┼┼┼○┼┼┼○┼┼┼
//	┼┼○┼┼┼┼┼○┼┼
//	┼○┼┼┼┼┼┼┼○┼
//	○┼┼┼┼┼┼┼┼┼○

	{
		for(int i = 0 ; i < 11 ; i ++) { //y축
			for(int j = 0 ; j < 11 ; j ++) {  //x축
			
				if(i == j)  // 대칭되게끔 
					System.out.printf("%c", '○');
//				else if(10 -  i == (j % 10) ) 
//					System.out.printf("%c", '○');
//				else if(i == 0 && j == 10)
//					System.out.printf("%c", '○');
				else if (10- i == j )
					System.out.printf("%c", '○');
				else
					System.out.printf("%c", '┼');
			
			}
			
			System.out.println();
		}

	    System.out.println("2번 과제 출력 완료");
	    System.out.println();
	}
	
	// 3. 위의 답을 복사해서 다음과 같은 출력이 가능하도록 코드를 수정하시오.
//	○┼┼┼┼┼┼┼┼┼○
//	┼○┼┼┼┼┼┼┼○┼
//	┼┼○┼┼┼┼┼○┼┼
//	┼┼┼○┼┼┼○┼┼┼
//	┼┼┼┼○┼○┼┼┼┼
//	┼┼┼┼┼○┼┼┼┼┼
//	┼┼┼┼○○○┼┼┼┼
//	┼┼┼○○○○○┼┼┼
//	┼┼○○○○○○○┼┼
//	┼○○○○○○○○○┼
//	○○○○○○○○○○○

	{
		for(int y = 0 ; y < 11 ; y ++) { //y축
			for(int x = 0 ; x < 11 ; x ++) {  //x축
			
				if(x == y)  // 대칭되게끔 
					System.out.printf("%c", '○');
				else if (10 - y == x )
					System.out.printf("%c", '○');
				else if (!(y < x || y < 10 - x))
					System.out.printf("%c", '○');
				else
					System.out.printf("%c", '┼');
			}
			System.out.println();
		}
	    System.out.println("3번 과제 출력 완료");
	}
}}

 

3. 정답 코드

 

4. 보충 및 회고 

(1) 보충

1) x+ y == 10 (등식에서 넘겨주기)

나의 경우에 10 - y == x 로 했는데 위와 동일한 식이고, 더 직관적이고 가독성 높은 조건식을 만들어 주기 위해 항을 넘겨주기는 방식으로 구현이 가능하다.

 

2) 배열에 넣어서 가능

문제의 조건은 아닌데 배열에 넣어서 배열을 출력이 가능하다

 

3) if절 else if 로 나열 대신에 한개 조건문에 || (논리연산)로 넣어서 가능함

조건이 여러가지일 때 if 절외 else if 로 출력이 가능하다. 하지만 elseif외에도 if절 하나에 ||(or) 논리연산으로도 구현이 가능하다.

 

4) x,y축에 대한 이해

하단에 삼각형 모향을 출력하기 위해서 직관적으로 느낌대로 짯다

그러나 일단 유념할 점은 등식이 아니라 부등식을 쓰면 범위로 적용된다는 것을 의식적으로 이해하는것이 중요하고

식이 이해가 안되고 어려우면 다른식으로 이항을 이용해서 이해하면 수월할수있다.

최초에 짯던 1차 함수 그래프에서 부등식을 쓰면 선에서 으로 생각하면 보다 수월할 수있다.

 

(2) 회고

 

문제풀이과정에서 어떻게 접근하려고했는지 (접근방법) + 어려움이 있었는데 해결했다.

1) 

처음에 두번째 문제에서 %(나머지)연산으로 접근을 했다.

그러나 0을 나눌수는 없기 때문에 첫번째 줄이 출력이 잘 되지않았다.

그래서 별도의 조건을 만들어서 출력하게끔 할 수있으나, 바람직한 방식으로 보기는 어렵다

 

이 경우 좀 더 단순하게 생각하면 i와 j 가 같아지게끔 하는 다른방식을 생각할수있다.

x,y축으로 생각하면서 수의 변화를 느끼면 바람직하다.