문제는 다음과 같다:
6 6 ( 입력 값 )
0 1 2 3 4 5
19 20 21 22 23 6
18 31 32 33 24 7
17 30 35 34 25 8
16 29 28 27 26 9
15 14 13 12 11 10
위처럼 6 6이라는 입력을 주면 6 X 6 매트릭스에 나선형 회전을 한 값을 출력해야 한다.
// javaScript 풀이
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<script>
function solution() {
var m, n; // 배열의 크기
var k = 0; // 출력 값
var flag = 1; // 회전 값
var m = parseInt(prompt('첫번째 숫자를 입력 하세요.'));
console.log("첫번째 입력값 : " + m);
var n = parseInt(prompt('두번째 숫자를 입력 하세요.'));
console.log("두번째 입력값 : " + n);
var answer = new Array(); // 출력값이 들어갈 배열
for(var i=0; i<m; i++){
answer[i] = new Array();
for(var j=0; j<n; j++){
answer[i][j] = k;
k++;
}
}
// 배열을 출력
for(var i=0; i<answer.length; i++){
document.write('<br/>')
for(j=0; j<answer[i].length; j++){
document.write(answer[i][j] + ", ");
}
}
}
</script>
</head>
<body>
<input type="button" value="알고리즘 부시기" onClick="solution()">
</body>
</html>
// JAVA 풀이
import java.util.Scanner;
public class go {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.print("숫자를 입력하세요 ex) 6 6 : ");
int num1 = sc.nextInt();
int num2 = sc.nextInt();
spiralArray(num1, num2);
}
public static void spiralArray(int x, int y) {
int[][] copy = new int[x][y];
int count = 0; // 0 ~ x*y-1 값
int flag = 0; // 진행방향
int i = 0, j = 0;
while (true) {
switch (flag) { // 진행방향 ->
case 0: // 방에 값을 넣고 1 증가 시킴
copy[i][j++] = count++; // 다음 방향으로 한칸 이동
if (j == y || copy[i][j] != 0) { // 이동한 방에 값이 있거나 방이 없으면
j--; // 이전 방으로 돌아온다
i++; // 다음 진행할 방향으로 한칸이동
flag = 1; // 진행방향 설정
}
break;
case 1: // 진행방향 ↓
copy[i++][j] = count++;
if (i == x || copy[i][j] != 0) {
i--;
j--;
flag = 2;
}
break;
case 2: // 진행방향 <-
copy[i][j--] = count++;
if (j == -1 || copy[i][j] != 0) {
i--;
j++;
flag = 3;
}
break;
case 3: // 진행방향 ↑
copy[i--][j] = count++;
if (i == 0 || copy[i][j] != 0) {
i++;
j++;
flag = 0;
}
break;
}
if (count == x * y) // 모든방에 값이 들어가면 나가기
break;
}
for (i = 0; i < x; i++) {
for (j = 0; j < y; j++) {
System.out.print(copy[i][j] + "\t");
}
System.out.println();
}
}
}
// 풀이중
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<script>
function solution() {
var m, n; // 배열의 크기
var k = 0; // 출력 값
var flag = 1; // 회전 값
var m = parseInt(prompt('첫번째 숫자를 입력 하세요.'));
console.log("첫번째 입력값 : " + m);
var n = parseInt(prompt('두번째 숫자를 입력 하세요.'));
console.log("두번째 입력값 : " + n);
var answer = new Array(); // 출력값이 들어갈 배열
for(var i=0; i<m; i++){
answer[i] = new Array();
if(flag == 1){
for(var a=0; a<n; a++){ // -> 진행 채우기
answer[i][a] = k;
k++;
}
flag *= (-1);
}
var temp = m;
if(flag == -1){
for(var b=1; b<temp; b++){ // 아래 진행 채우기
answer[b] = new Array();
answer[b][temp-1] = k;
k++;
}
flag *= (-1);
}
var temp1 = n;
if(flag == 1){
for(var c=1; c<temp1; c++){ // <- 진행 채우기
answer[temp1] = new Array();
answer[temp1][temp1-c] = k;
k++;
}
flag *= (-1);
}
/*
for(var j=0; j<n; j++){ // 위 진행 채우기
answer[i][j] = k;
k++;
}
*/
}
// 배열을 출력
for(var i=0; i<answer.length; i++){
document.write('<br/>')
for(j=0; j<answer[i].length; j++){
document.write(answer[i][j] + ", ");
}
}
}
</script>
</head>
<body>
<input type="button" value="알고리즘 부시기" onClick="solution()">
</body>
</html>
'Algorithm Study' 카테고리의 다른 글
재귀함수? rescursive? 이진함수트리? (0) | 2022.02.10 |
---|---|
코딩도장 Lv.1 (0) | 2020.01.09 |