이번년도의 목표 정보처리기사 취득하기
실기가 20일 남짓 남았다.
알고리즘을 이해하기 위해 블로그에 정리해본다.
동작 설명
배열 문제를 쉽게 구현하는방법은 매트릭스를 그린 후 그 위에 좌표를 작성하면 패턴을 찾기가 한결 수월해진다.
글보다 그림으로 그려서 이해해봅시다.
좌표를 그리고 그 위에 우리가 목표로 하는 모래시계를 그려본다.
규칙을 살펴보면...
1행은 0부터 끝까지 숫자를 출력한다.
2행은 1부터 끝-1까지 숫자를 출력한다..
3행은 2부터 끝-2까지 숫자를 출력한다.
변수가 있는데. 바로 한칸씩 앞뒤로 줄어들다가.. 가운데를 지나면 다시 한칸씩 늘어난다는 점이다.
이문제의 핵심은 다중반복문을 상, 하로 나누어서 동작한다는것에 있다.
V는 여기서 증가하는 값이 된다. 별을 찍어줄거면 상관없지만, 찍어줄 문자가 1씩 증가하기 때문에 써야한다.
M은 N*N매트릭스에서 M/2 + 1 이 된다. (당연히 예쁜 모래시계 모양을 위해 N은 홀수가 들어온다고 가정한다)
좌표에서 상, 하를 나누는 기준이 된다.
첫번째 다중 반복문은 상단에 역삼각형을 출력해준다.
다중 반복문 내부를 살펴보면... 위에서 살펴본 패턴처럼
열은 1부터 M까지다.
세줄을 출력하게 된다.
그리고 안쪽 반복문을 살펴보면.. R ~ 6 - R인데...
시작좌표는 늘어나고.. 끝좌표는 줄어드니까 결국
00000 이런모양이 된다(....)
000
0
<script>
//실수. 이렇게 하면 2 x 5 배열이 된것이다.
//var arr = [new Array(5), new Array(5)];
/*
또다른 방법.
var arr = [];
for(var i = 0; i < 5; i ++){
arr[i] = new Array(5);
}
*/
var arr = [new Array(5), new Array(5), new Array(5), new Array(5), new Array(5)]
var value = 1;
var middle = 3;
for(var r = 0; r < middle; r ++){
for(var c = r; c < 5 - r; c ++){
arr[r][c] = '*';
//value++;
}
}
for(var r = middle ; r < 5; r++){ //3, x
for(var c = 4 - r; c <= r; c++){ // 3, 1 | 3, 2 | 3, 3
arr[r][c] = '*'; //4, 0 | 4, 1 | 4, 2 | 4, 3 | 4, 4|
//value++;
}
}
for(var i = 0; i < 5; i ++){
for(var j = 0; j < 5; j++){
typeof arr[i][j] == "undefined" ? document.write(' ') : document.write(arr[i][j]);
}
document.write("<br>")
}
</script>
숫자는 예쁘게 출력되지 않아서 별을 출력해보았다.
예전에 꽤 고생해서 풀었던것 같은데... 배열을 써서 푸니까 꽤 쉽게 풀렸다.
시작 ~ 끝 조건이 꽤 헷갈려서 만약 문제로 나온다면 당황할것 같다 =_= 침착하게 풀도록 하자.
'Today I learned' 카테고리의 다른 글
20191209 보안 SW 개발 세미나 1일차 (0) | 2019.12.09 |
---|---|
2019-09-26 오늘 만난 코드들 (0) | 2019.09.26 |
[정보처리기사 알고리즘] 버블정렬 (0) | 2019.09.23 |
[정보처리기사 알고리즘] 선택정렬 (0) | 2019.09.23 |
[이클립스 플러그인] 이클립스에서 Vim 환경 사용하기 (1) | 2019.09.22 |
댓글