티스토리 뷰

반응형

[2019 03 20 깃헙 주소에 접근 불가한 것을 확인하고 수정함]

전치행렬을 구하는법은 간단합니다. 행과 열을 바꾸면 되지요. 
하지만 코딩을 막 시작하시는 분들께서는 전치행렬을 프로그래밍 할 때 어려움을 느끼십니다.

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

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

int tmp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=tmp;

}

이렇게 해버리면 행렬이 다시 원래 상태로 되돌아오기 때문이죠. 이럴 때는 chk 배열을 하나 선언해서 해당 행렬을 바꿀때 열행을 1로 바꿉니다. 그리고 행렬을 바꾸려고 할때 해당 열행이 1이라면 연산은 무시됩니다. chk 배열은 초~중급 알고리즘에서 상당히 많이쓰이므로 지금부터 익숙해지는게 좋습니다. 

chk 배열을 사용하면 아래와 같은 절차가 됩니다.

전치행렬구하기 문제는 2017 하반기 nhn 코딩테스트에 앞선 연습문제로도 나왔었습니다.

소스보기

https://github.com/ingyeoking13/algorithm/blob/master/swtest/nhn/transposed.c

반응형