주어진 배열을 시계방향으로 회전시키는 프로그램알고리즘/기초2023. 8. 7. 21:41
Table of Contents
char[][] star = {
{'*','*',' ',' ',' '},
{'*','*',' ',' ',' '},
{'*','*','*','*','*'},
{'*','*','*','*','*'}
};
위의 주어진 2차원배열을 시계방향으로 90도 만큼 회전시켜야한다.
먼저 결과를 저장하기위한 2차원배열 result[][]를 선언해주고,
시계방향으로 회전시킬경우 4 X 5배열에서 5 X 4배열로 변하기때문에
char[][] result = new char[star[0].length][star.length];
위와 같이 2차원배열을 생성해준다.
시계방향으로 회전하기전 상태인 char[][] star 배열을 중첩for문을 사용하여 출력해준다.
//4 X 5 배열(star) 출력
for(int i=0; i<star.length; i++) { //star.length = 4
for(int j=0; j<star[i].length; j++) { //star[i].length = 5
System.out.print(star[i][j]);
}System.out.println();
}
System.out.println();
star의 요소들을 배열 result의 적절한 위치로 옮긴다.
원래의 위치를 (i,j) 옮길 위치를(x,y)라고 가정한다.
*star[][] (before)
0,0 | 0,1 | 0,2 | 0,3 | 0,4 |
1,0 | 1,1 | 1,2 | 1,3 | 1,4 |
2,0 | 2,1 | 2,2 | 2,3 | 2,4 |
3,0 | 3,1 | 3,2 | 3,3 | 3,4 |
*result[][] (after)
0,0 | 0,1 | 0,2 | 0,3 |
1,0 | 1,1 | 1,2 | 1,3 |
2,0 | 2,1 | 2,2 | 2,3 |
3,0 | 3,1 | 3,2 | 3,3 |
4,0 | 4,1 | 4,2 | 4,3 |
(색칠한 인덱스 부분이 '*'요소)
star[0,0] -> result[0,3]
star[0,1] -> result[1,3]
으로 이동해야한다.
이것을 표로 정리하면 아래와 같다.
i | j | x | y |
0 | 0 | 0 | 3 |
0 | 1 | 1 | 3 |
0 | 2 | 2 | 3 |
0 | 3 | 3 | 3 |
1 | 0 | 0 | 2 |
1 | 1 | 1 | 2 |
... | ... | ... | ... |
3 | 2 | 2 | 0 |
3 | 3 | 3 | 0 |
x의 값은 j의 값과 완전히 일치하기 때문에 x값은 j의 값을 그대로 쓰면되고,
y와 i의 관계를 살펴보면 합이 항상 일정함을 알 수 있다.
i + y = 3이고, 3은 star.length-1과 동일한 값이다.
따라서 i+y = star.length-1이니까, y = star.length-1-i라고 할 수 있다.
for(int i=0; i<star.length; i++) {
for(int j=0; j<star[i].length; j++) {
int x = j;
int y = star.length-1-i;
result[x][y] = star[i][j];
}
}
전체코드
public class Main {
public static void main(String[] args) {
char[][] star = {
{'*','*',' ',' ',' '},
{'*','*',' ',' ',' '},
{'*','*','*','*','*'},
{'*','*','*','*','*'}
};
//2차원 배열 result의 길이를 5 X 4로 설정
char[][] result = new char[star[0].length][star.length];
//4 X 5 배열(star) 출력
for(int i=0; i<star.length; i++) { //star.length = 4
for(int j=0; j<star[i].length; j++) { //star[i].length = 5
System.out.print(star[i][j]);
}System.out.println();
}
System.out.println();
for(int i=0; i<star.length; i++) {
for(int j=0; j<star[i].length; j++) {
int x = j; //x값과 y값을 반복설정하여 star[i][j]을 받음
int y = star.length-1-i;
result[x][y] = star[i][j];
}
}
for(int i=0; i<result.length; i++) {
for(int j=0; j<result[i].length; j++) {
System.out.print(result[i][j]);
}System.out.println();
}System.out.println();
}
}
출력결과
**
**
*****
*****
****
****
**
**
**
728x90
'알고리즘 > 기초' 카테고리의 다른 글
주어진 2차원 배열의 복사를 이용하여 확장하기 (0) | 2023.08.08 |
---|---|
간단한 암호화 프로그램 (0) | 2023.08.08 |
입력된 데이터를 읽고 각 숫자의 개수를 출력하는 프로그램 (0) | 2023.08.07 |
거스름 돈 계산하기 (0) | 2023.08.07 |
회문수(palindrome) 구하기 (0) | 2023.08.06 |
@leegeonwoo :: geonwoo
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!