도전!프로그래밍 three
1. 이 문제의 핵심은 (i, j)의 배열을 90도 회전시키면 (j, 3-i)가 된다는 것이다!
for(i=0; i<4; i++)
for(j=0; j<4 ; j++)
arr[j][3-i] = pArr[i][j];
2. 이 문제는 배열을 채우는 규칙성을 찾는 문제다.
가로로 증가 -> 세로로 증가(횟수 1감소) -> 가로로 감소 -> 세로로 감소(횟수 1 감소)
즉, 입력값이 4면 가로로 1 2 3 4(4번)가 채워지고 다음 아래로 내려가면서 5 6 7(3번)
다시 왼쪽으로 가면서 8 9 10(3번), 위로 올라가면서 11 12(2번).......이런식이다.
물론 구현도 쉽지 않다.. 각자 개성에 맞게 하면된다.
while(1)
{
for(count=0, j+= direct; count<n; count++) //가로로 채우기
{
arr[i][j] = num++;
j += direct;
}
j -= direct;
n--; //가로 이후에 횟수 감소
if(n==0)
break;
for(count=0, i+=direct;count<n;count++) //세로로 채우기
{
arr[i][j] = num++;
i += direct;
}
i -= direct;
direct *= -1; //세로 이후에 방향 전환(증가 <-> 감소)
}
3. 이건 %연산자와 나눗셈의 특징만 알고 있다면 간단한 문제다.
즉, 나눗셈의 나머지는 나누어지는 값보다 작은 수들이다.
따라서 99까지 나오려면 100으로 나눈 나머지를 취하면 된다.
for(i=0; i<5; i++)
printf("난수 출력 : %d \n", rand()%100);
4. 3번과 같은 문제다. 단, 두개의 주사위를 던졌을 때 두 수가 항상 같으면 안되므로
난수 생성을 따로 따로 해주면 된다.
n1 = rand()%7;
n2 = rand()%7;
printf("주사위 결과 : %d, %d \n", n1, n2);
5. 문제는 간단하지만 구현에 있어서 개인차가 많을 것으로 생각 된다.
내 코드는 첨부파일에
6. 역시 개념 자체는 쉬우나 구현을 하기까지는 어려운 문제다. 한참 동안의 버그를 잡은 끝에 완성했다..