반응형

도전1. 4x4 int 형 2차원 배열을 선언하고, 모든 요소를 아래 그림의 왼쪽에 있는 형태와 동일하게 초기화하자. 그리고 배열의 요소들을 오른쪽 방향으로 90도씩 이동시켜서 출력하는 프로그램을 작성해 보자.

 

 

도전 프로그래밍3 부터는 알고리즘이 복잡하고 생각보다 코드는 간단한 문제들이 많습니다. 

알고리즘만 잘 만들어내면 실제 코드는 그렇게 어렵지 않은 문제들입니다. 

 

도전1의 알고리즘을 잘 생각해 봅시다 

90도로 회전을 합니다. 그렇다면 각각 요소의 좌표는 어떻게 변할까요? 

1행의 요소들을 잘 보죠 (0, 0)은 (0, 3)으로 (0, 1)은 (1, 3)으로 (0, 2)는 (2, 3)으로 (0, 3)은 (3, 3)으로 갑니다... 

 

이를 보기좋게 모두 써보면 

(0, 0) -> (0, 3)    (1, 0) -> (0, 2)    (2, 0) -> (0, 1)    (3, 0) -> (0, 0)

(0, 1) -> (1, 3)    (1, 1) -> (1, 2)    (2, 1) -> (1, 1)    (3, 1) -> (1, 0)

(0, 2) -> (2, 3)    (1, 2) -> (2, 2)    (2, 2) -> (2, 1)    (3, 2) -> (2, 0) 

(0, 3) -> (3, 3)    (1, 3) -> (3, 2)    (2, 3) -> (3, 1)    (3, 3) -> (3, 0) 

 

여러분들도 규칙이 눈에 보이시나요? 

처음에 잘 모를때는 이렇게 모든 요소들을 적어서 구하면 쉽게 구할 수 있습니다. 

익숙해지면 한 줄만 보고도 알고리즘을 유추해낼 수 있게 되지요. 

 

위 알고리즘은 2가지 요소만 알면 끝입니다. 

1. 이동하기 전 열과 이동한 후 행이 같다는것 

2. 이동하기 전 행과 이동한 후 열의 합이 3이라는 것 

 

 

의사코드입니다. 

 

4x4 배열을 선언 

90도 회전시키는 함수를 선언(4x4 배열 입력)

{ 

 새로운 4x4 배열 선언 

 새로운 배열에다가 입력받은 배열값을 복사 

 

   반복문 행(i)을 0부터 3까지 

      반복문 열(j)을 0부터 3까지 

          입력받은 배열 (i, j) = 새로운 배열 (3-j, i) 

} 

출력함수

   반복문 2개를 중첩해 배열을 출력한다. 

 

이해가 가셧는지요..? 위에서는 화살표 방향이 -> 이지만 실제 코드에 넣을때 <- 니까 양쪽이 바뀐것 유의하시기 바랍니다. 

 

실제 코드입니다. 

 

 

아구구 주석이 잘못달렸네요

10번째 줄 주석이 14번째 줄로 가면 되겠습니다..

저 14번째 줄 딱 한줄이 이 알고리즘의 전부라고 봐도 됩니다.

 

출력결과입니다.

아주아주 잘 돌아가는걸.. 확인할 수 있습니다. 

 

이상입니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기