[10번]
1. 문제설명
// 1. canvas라는 이름으로 문자 20x20개를 저장할 수 있는 배열 객체를 생성한다.
[ ] canvas= [ ];
// 2. canvas 배열을 다음처럼 ‘┼’ 문자로 채우는 코드를 작성하시오.
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
{
// 코드를 작성하는 공간
System.out.println(“board 초기화 완료”);
}
// 3. ‘○’ 문자를 이용해서 canvas에 선을 그리는 함수를 작성하시오.
// 함수의 호출 예
{
// 2번 문제 코드
System.out.println(“board 초기화 완료”);
// 3번 문제풀이로 작성된 함수를 호출하는 코드
int x1 = 2;
int y1 = 2;
int x2 = 13;
int y2 = 13;
drawLineOnCanvas(canvas, x1, y1, x2, y2);
}
// 위의 결과는 다음과 같다.
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼○┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼○┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼○┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼○┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼○┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼○┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼○┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼○┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼○┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼○┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼○┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼
2. 나의 해답
package T221220;
public class test10 {
static void printArray(char [][] canvas) {
for(int i = 0 ; i < canvas.length; i++) {
for(int j = 0 ; j < canvas[i].length; j++)
System.out.print(canvas[i][j]);
System.out.println();}
}
static void drawLineOnCanvas(char[][] canvas, int x1, int y1, int x2, int y2) {
//아래 둘은 두번째 값이 작을때 값 바꿔주기
if(x1 > x2) {
int tmp = x1;
x1 = x2;
x2 = tmp;
}
if(y1 > y2) {
int tmp = y1;
y1 = y2;
y2 = tmp;
}
// i == y ; j == x
for(int i = 0 ; i < canvas.length; i++) {
for(int j = 0 ; j < canvas[i].length; j++) {
if((i + y1) == (j + x1))
canvas[i + y1 - 1][j + x1 -1] = '○';
if( j + x1 == x2) //도달 시 멈춤
break;
}
if( i + y1 == y2)
break;
}
}
public static void main(String[] args) {
// 1. canvas라는 이름으로 문자 20x20개를 저장할 수 있는 배열 객체를 생성한다.
char [][] canvas = new char [20][20] ;
// 2. canvas 배열을 다음처럼 ‘┼’ 문자로 채우는 코드를 작성하시오.
{
// 코드를 작성하는 공간
for(int i = 0 ; i < canvas.length; i++)
for(int j = 0 ; j < canvas[i].length; j++) {
canvas[i][j] = '┼';
}
System.out.println("board 초기화 완료");
// printArray(canvas); //출력
}
// 3. ‘○’ 문자를 이용해서 canvas에 선을 그리는 함수를 작성하시오.
// 함수의 호출 예
{
// 2번 문제 코드
System.out.println("board 초기화 완료");
// 3번 문제풀이로 작성된 함수를 호출하는 코드
int x1 = 2;
int y1 = 2;
int x2 = 13;
int y2 = 13;
drawLineOnCanvas(canvas, x1, y1, x2, y2);
printArray(canvas); //출력
}
}
}
콘솔 : 21 (오답)
3. 정답 코드
상동
4. 보충 및 회고
(1) 보충
(2) 회고 : 문제풀이과정에서 어떻게 접근하려고했는지 (접근방법) + 어려움이 있었는데 해결했다.
이중 for문을 쓸 때 조건을 가급적 건드리지 않고 수행하려고 했다. 바람직한것 같다.다만 (i + y1) 을 다른 지역변수로 선언해서 이 값을 위주로 했으면 더 깔끔할수도 있었을 것같다.
[11번]
1. 문제설명
10번 문제를 다음처럼 객체지향으로 구현하려고 한다. 각 문장에 올바른 답을 적으시오.
Canvas canvas = new Canvas();
canvas.drawLine(2,2,13,13);
//1. Canvas 클래스를 생성하고 속성으로 char[][] buf를 추가하고 이 속성으로 참조할 이차원 배열 객체(20x20 크기)를 생성하는 생성자를 작성하시오.
// 파일명 : Canvas.java
class Canvas{
// 여기에 코드를 작성하시오.
}
// 2. 10번 문제에서 작성했던 drawLineOnCanvas() 함수를 Canvas 클래스에 drawLine()로 다시 작성하시오.
2. 나의 해답
test10
package T221220;
public class test10 {
static void printArray(char [][] canvas) {
for(int i = 0 ; i < canvas.length; i++) {
for(int j = 0 ; j < canvas[i].length; j++)
System.out.print(canvas[i][j]);
System.out.println();}
}
static void drawLineOnCanvas(char[][] canvas, int x1, int y1, int x2, int y2) {
//아래 둘은 두번째 값이 작을때 값 바꿔주기
if(x1 > x2) {
int tmp = x1;
x1 = x2;
x2 = tmp;
}
if(y1 > y2) {
int tmp = y1;
y1 = y2;
y2 = tmp;
}
// i == y ; j == x
for(int i = 0 ; i < canvas.length; i++) {
for(int j = 0 ; j < canvas[i].length; j++) {
if((i + y1) == (j + x1))
canvas[i + y1 - 1][j + x1 -1] = '○';
if( j + x1 == x2) //도달 시 멈춤
break;
}
if( i + y1 == y2)
break;
}
}
public static void main(String[] args) {
// 1. canvas라는 이름으로 문자 20x20개를 저장할 수 있는 배열 객체를 생성한다.
char [][] canvas = new char [20][20] ;
// 2. canvas 배열을 다음처럼 ‘┼’ 문자로 채우는 코드를 작성하시오.
{
// 코드를 작성하는 공간
for(int i = 0 ; i < canvas.length; i++)
for(int j = 0 ; j < canvas[i].length; j++) {
canvas[i][j] = '┼';
}
System.out.println("board 초기화 완료");
// printArray(canvas); //출력
}
// 3. ‘○’ 문자를 이용해서 canvas에 선을 그리는 함수를 작성하시오.
// 함수의 호출 예
{
// 2번 문제 코드
System.out.println("board 초기화 완료");
// 3번 문제풀이로 작성된 함수를 호출하는 코드
int x1 = 2;
int y1 = 2;
int x2 = 13;
int y2 = 13;
drawLineOnCanvas(canvas, x1, y1, x2, y2);
printArray(canvas); //출력
}
}
}
<Canvas.java>
package T221220;
//1. Canvas 클래스를 생성하고 속성으로 char[][] buf를 추가하고 이 속성으로 참조할 이차원 배열 객체(20x20 크기)를 생성하는 생성자를 작성하시오.
public class Canvas {
int x1;
int y1;
int x2;
int y2;
char [][] buf ;
public Canvas() {
// TODO Auto-generated constructor stub
buf = new char [20][20];
x1 = 0;
y1 = 0;
x2 = 0;
y2 = 0;
}
public void drawBoard(){
// 2. canvas 배열을 다음처럼 ‘┼’ 문자로 채우는 코드를 작성하시오.
// 코드를 작성하는 공간
for(int i = 0 ; i < buf.length; i++)
for(int j = 0 ; j < buf[i].length; j++) {
buf[i][j] = '┼';
}
System.out.println("board 초기화 완료");
// printArray(canvas); //출력
}
void drawLine( int x1, int y1, int x2, int y2){
//아래 둘은 두번째 값이 작을때 값 바꿔주기
if(x1 > x2) {
int tmp = x1;
x1 = x2;
x2 = tmp;
}
if(y1 > y2) {
int tmp = y1;
y1 = y2;
y2 = tmp;
}
//1차 함수의 경우 기울기가 1일때
// i == y ; j == x
for(int i = 0 ; i < buf.length; i++) {
for(int j = 0 ; j < buf[i].length; j++) {
if((i + y1) == (j + x1))
buf[i + y1 - 1][j + x1 -1] = '○';
else if (10- ( i + y1) ==(j + x1))
buf[i + y1 - 1][j + x1 -1] = '○';
if( j + x1 == x2) //도달 시 멈춤
break;
}
if( i + y1 == y2)
break;
}
}
public void printArray() {
// TODO Auto-generated method stub
for(int i = 0 ; i < buf.length; i++) {
for(int j = 0 ; j < buf[i].length; j++)
System.out.print(buf[i][j]);
System.out.println();
}
}
}
3. 정답 코드
상동
4. 보충 및 회고
(1) 보충
(2) 회고 : 문제풀이과정에서 어떻게 접근하려고했는지 (접근방법) + 어려움이 있었는데 해결했다.
1)문제의 조건에서 buf의 참조변수에다가 배열객체 생성하는 생성자 만드는 것이 흥미로웠다.
이러한 방식으로 생성자 만들기를 익숙하게 해야겠다.
2) 가급적 멤버변수의 값을 직접 세팅하는것은 유의하자 이러한 사태를 미연에 방지하기 위해서 접근제어자를 이용하자
'문제풀이 > 일일연습문제' 카테고리의 다른 글
일일문제 : 9번째- 221227 [12-4-화] - 엘리베이터 (0) | 2022.12.27 |
---|---|
일일문제 : 7번째- 221221 [12-3-수] - 객체지향 위인전 (1) | 2022.12.21 |
일일문제 : 5번째- 221219 [12-3-월] - 함수화 / 피라미드 (0) | 2022.12.19 |
일일문제 : 4번째- 2212116 [12-2-금] - 보드와 돌 만들기 (0) | 2022.12.16 |
일일문제 : 3번째- 2212115 [12-2-목] - 돌 전환시키기 (0) | 2022.12.15 |