IT story/Algorism

배열2 직각 삼각형 만들기

jason719 2016. 9. 4. 16:18

2016.09.04. Sun. 정보처리 산업기사 알고리즘


 직각 삼각형 만들기에서는 배열의 행과 열의 위치를 잡는 연습이다.

도형의 시작과 끝을 파악하고, 시작위치와 끝나는 위치 증감여부를 파악해야한다.

아래의 세 가지 예제로 이해해보자.


직각 삼각형 만들기


a. 왼쪽 직각 삼각형 만들기 

1. 행은 1에서 5까지 증가한다. 

2. 열은 1행(1→1), 2행(1→2), 3행(1→3), 4행(1→4), 5행(1→5) (증가)

즉, 시작 지점은 1 이지만, 끝나는 지점은 변하고 있다.

끝나는 위치를 살펴보면 행의 숫자처럼 증가 한다는 것을 알 수 있다. 

(=끝나는 위치의 변수에 행의 값을 넣어준다)


예제

package example;


class Example{

int n = 5;

int row,col;

public void leftTriangle1(){

int array[][] = new int[n][n];

int num = 1;

System.out.println("\n 배열2 a.왼쪽 직각 삼각형");

for(int row=0; row<n; row++){

for(int col=0; col<=row; col++){

array[row][col]=num++;

}

}

for(row=0;row<n;row++){

for(col=0;col<n;col++){

System.out.printf("%3d",array[row][col]); 

}

System.out.println();

}

}//leftTriangle1


b. 오른쪽 직각 삼각형 만들기

1. 행은 1에서 5까지 증가한다.

2. 열1행(55), 2행(45), 3행(35), 4행(25), 5행(15) (증가)

즉, 끝나는 지점은 5로 고정되어있지만, 시작 지점은 행과 반대의 수이다. 

(=끝나는 위치의 변수에 행의 리버스 값을 넣어준다) (= n+1-(row))


예제

public void rightriangle1(){

int array[][] = new int[n][n];

int num = 1;

System.out.println("\n 배열2 b.오른쪽 직각 삼각형");

for(int row=0; row<n; row++){

for(int col=(n-1)-row; col<n; col++){

array[row][col]=num++;

}

}

for(row=0;row<n;row++){

for(col=0;col<n;col++){

System.out.printf("%3d",array[row][col]); 

}

System.out.println();

}

}//rightriangle1

** 리버스 식이 설명과 다른 이유는 시작 지점이 0부터 이기때문.


C. 왼쪽 직각 삼각형 오른쪽부터 채우기

1. 행은 1에서 5까지 증가한다.

2. 열은 1행(1←1), 2행(1←2), 3행(1←3), 4행(1←4), 5행(1←5) (감소)

즉, 끝나는 지점은 1로 고정되어있지만, 시작 지점은 행의 숫자처럼 증가 한다는 것을 알 수 있다.

(=시작하는 위치의 변수에 행의 값을 넣어준다)


예제

public void leftTriangle2(){

int array[][] = new int[n][n];

int num = 1;

System.out.println("\n 배열2 c.왼쪽 직각 삼각형 오른쪽부터 채우기");

for(int row=0; row<n; row++){

for(int col=row; col>=0; col--){

array[row][col]=num++;

}

}

for(row=0;row<n;row++){

for(col=0;col<n;col++){

System.out.printf("%3d",array[row][col]); 

}

System.out.println();

}

}//leftTriangle2

}//class

public class Algorism {

public static void main(String[] args) {

Example e = new Example();

e.leftTriangle1();

e.rightriangle1();

e.leftTriangle2();

}//main

}//class


JAVA를 시작한 지 한 달정도 밖에 안된 사람이라 1부터 시작과 0부터 시작에 대해 헷갈릴 수 밖에 없다고 생각한다.

특히, 우리나라는 태어나자마자 1살을 카운트하는 문화이기때문에 더더욱 0부터 시작하는 것이 어색하다.

보기좋게 1부터 시작하는 코딩을 해도 되지만, 0부터 연산을 시작하는 컴퓨터와 친해지기 위해 0부터 시작하는 것에

익숙해지려 한다.