전치행렬이란?
임의의 행렬에 대해 열의 위치와 행의 위치를 바꾼 행렬
Like This!
공백으로 구분 주어 1(공백)2(공백)3(공백) 식으로 받은 배열 3개를 열과 행의 위치를 바꾸어
1 4 7
2 5 8
3 6 9
로 출력되게 많드는 알고리즘을 구현해보자.
복잡하게 구현한 ver.이 먼저 있다.
8-15 행을 기준으로 수열 n개씩 3번 받고 shiftToArray로 넘긴다.
17 치환이 끝난 애들을 shiftToNewArray(int[] array1, int[] array2, int[] array3)까지
21-28 shiftToArray(String inputJason) 함수에서는
11,13,15 shift() 에서 입력받은 임의의 수열을 각각 에서 받아
22 공백으로 split()(쪼개기)해서 "1" "2" "3" 각각 하나씩 String 배열에 넣고
24-25 int형 배열 numbers[] 에 int로 parsing해서 넣는다
27 그리고 그 배열을 return 한다.
31 int로 치환완료된 애들을 (각각 123,456,789) 매개변수로 받는다.
32 새로운 2차원 배열을 생성하고
33-37 array1, 2, 3에서 맨 첫번째 애들 각각 1,4,7 부터 뽑아 새로운 2차원 배열 0번째부터 넣는다.
38 그리고 그 새로운 배열 returnArray를 return한다.
41 출력을 위해 2차원 배열을 매개변수로하는 메소드를 만든다
42 매개변수로 넘어온(returnArray = outputArray)을 1차원 배열(변수 array)에 차례로 넣는다.
43 1차원 배열 'array'를 int형 변수 i 에 넣어 차례로 출력한다.
46 array1이 다 출력되면 줄바꿈 한다.
뭐 이해는 어찌저찌했는데 너무 복잡하다
좀 더 간단히 만들어보자
개선한 버전
9 입력받기위한 스캐너를 선언한다
10-13 행갯수과 열갯수를 받는다
15 입력받은 행,열 갯수만큼 2차원 배열을 선언한다
16-17 행(line)을 기준으로 하는 for문 안에 열(row)을 기준으로하는 내부 for문을 만든다
18 입력받은 값을 열[j]을 기준으로 하는 배열에 먼저 넣는다.
21 print(2차원배열)메소드를 부른다
27 매개변수로 넘어온(outputArray)을 1차원 배열(변수 array)에 차례로 넣는다.
28-29 1차원 배열 'array'를 int형 변수 i 에 넣어 차례로 출력한다.
31 array1이 다 출력되면 줄바꿈 한다.
18번 라인이 이해가 안가신다면,
전치행렬의 핵심 알고리즘이 이해가 안가신다면....
왼쪽 손글씨에서 갈색 으로 쓴 부분은 outputArray[i][j]를 그려놓은 것
오른쪽 연두색 형광펜으로 쓴 부분은 outputArray[j][i]를 그려놓은 것
2차원배열에서 [i]를 기준으로하냐 [j]를 기준으로 하냐에 따라서
전치행렬을 만들 수 있다.
'이론 > Data Structure , Algorithm' 카테고리의 다른 글
[210915] 백준 2920번 문제 풀이 / 음계 (0) | 2021.09.15 |
---|---|
[210614] 자바 문제 리딩, static (0) | 2021.06.14 |
[210614] 자바 문제 리딩, 객체와 은닉화 (0) | 2021.06.14 |
[210530] 자바 문제 리딩 , 배열에서 가장 큰 값과 작은 값 구하기 (0) | 2021.05.30 |
[210529] 자바 문제 리딩 Compare() (0) | 2021.05.29 |