반응형

도전2. 달팽이 형태의 배열을 만들어 주는 프로그램을 작성해 보자.

사용자로부터 숫자n을 입력받아서 n x n 의 달팽이 배열을 출력해 주는 프로그램을 작성해 보자.

 

 

알고리즘에 대해서 생각해봅시다. 

 

말 그대로 달팽이처럼 점점 작아지는 소용돌이를 채우면서 수를 차례로 입력하는 것입니다. 

 

 

위의 그림을 화살표 따라 잘 봐주시기 바랍니다 

 

옆으로 5 밑으로 4 왼쪽 4 위 3 오른쪽 3 밑2 왼2 위1 오른쪽1 입니다. 

즉 5 4 4 3 3 2 2 1 1 인데요 

기본 틀을 만들어 보면 

 

for( ) <- 젤처음 5 한번 반복할것 

 

for( ) <- 4 3 2 1 반복할것 (안에 반복문이 2개이므로 두번씩 된다)

   for( ) <- 밑으로, 위로 가는 반복문

 

   for( ) <- 왼쪽으로, 오른쪽으로 가는 반복문

 

이렇게 반복문 틀을 만들고, 세부적으로 

 

for( ) <- 젤처음 5 한번 반복할것

 

for( ) <- 4 3 2 1 반복할것 (안에 반복문이 2개이므로 두번씩 된다)

    for( ) <- 밑으로, 위로 가는 반복문 

        if(밑으로 갈때) 

        else(위로 갈때)

    for( ) <- 왼쪽으로, 오른쪽으로 가는 반복        if(왼쪽으로 갈때)

        else(오른쪽으로 갈때) 

 

이렇게 되며, 밑, 왼쪽이 한 세트고, 위, 오른쪽을 한 세트로 

스위치 변수를 설정하여, 스위치 변수가 -1일땐 밑, 왼쪽 +1일땐 위 오른쪽으로 가게 하면 됩니다.. 

 

본격적인 의사코드 입니다. 의사코드에서는 원래 프로그램 목적에 맞게 

 

배열 길이 n을 입력받도록 하겠습니다. 

 

배열 x, y 좌표 선언  // 달팽이 경로그리며 돌아감

배열 내용 num 선언 // 갈수록 커짐 

스위치변수 -1 초기화 // -1일때 밑,왼 1일때  

넉넉한 2차원 배열을 선언하고

배열의 길이 n을 입력받아

 

for(n번반복) // 젤처음 n 한번 반복할것 

  오른쪽으로 가야하므로, y좌표를 1씩, num값을 1씩 늘려가며 배열에 대입 

 

for(n-1번 반복, n-1부터 1까지 감소) 

{ 

    for(상위 반복문 반복번만큼 반복) // 밑으로, 위로 가는 반복문 

         num 1씩 증가  

         if(스위치변수 -1일때) // 밑으로 갈때 

             x좌표 1씩 증가, 배열에 대입 

         else // 위로 갈떄 

             x좌표 1씩 감소, 배열에 대입 

    for(상위 반복문 반복번만큼 반복) // 왼쪽으로, 오른쪽으로 가는 반복 

         num 1씩 증가 

         if(스위치변수 -1일때) // 왼쪽으로 갈때 

             y좌표 1씩 감소, 배열에 대입

         else // 오른쪽으로 갈때 

             y좌표 1씩 증가, 배열에 대입 

스위치변수에 -1곱하기 

} 

배열을 출력 

 

 

이정도입니다. 

 

실제코드입니다. 

 

중간중간에 잘 보시면 

 

알고리즘 흐름에 맞춰 약간 순서가 바꼇습니다. (증가, 대입 부분) 

 

전체적인 흐름은 바뀐것이 없으니까 이해하기 힘들지 않을 것입니다. 

 

 

실행결과입니다.

 

멋지게 잘 실행되는것을 볼 수 있습니다. 

이상입니다.

 

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