얼마전에 친구넘이 면접 때문에 잠시 집에 왔다가 갔다.
근데 그넘이 면접을 본 회사에서 내준 문제가 있는데 그게 이미지를 회전하는 소스를 짜라는 것이었다.
조건은 C로 짜야하고 90°, 180°, -90° 이렇게 3가지를 할 수 있게 만들라는 것이었다.
한번도 이런 이미지 프로세싱과 관련한 소스는 구경도 못 해봤고 어떤 로직이 들어가는지도 잘 모른다.
다행히도 이 친구넘은 이미지 프로세싱에 대해서 잘 알고 있었다. 소스로 구현만 하면 된다고 했다.
심심도 하고 할 일도 없어서 옆에서 로직을 설명 좀 해달라고 했다.
이미지 회전 로직:
난 이 90° 회전하는 소스만 되면 180° 는 90° 회전한 이미지를 한번더 90° 회전하면 되고 -90° 는 90° 회전을 3번하면 되지 않겠냐고 했다. 근데...
친구넘 왈: 그럼 퍼포먼스에 문제가 있다고 한다. --_-;
나: 아~ 젠장...
이미지 회전 소소: Dev-C++ Version 4.9.9.2 에서 C로 작성
근데 그넘이 면접을 본 회사에서 내준 문제가 있는데 그게 이미지를 회전하는 소스를 짜라는 것이었다.
조건은 C로 짜야하고 90°, 180°, -90° 이렇게 3가지를 할 수 있게 만들라는 것이었다.
한번도 이런 이미지 프로세싱과 관련한 소스는 구경도 못 해봤고 어떤 로직이 들어가는지도 잘 모른다.
다행히도 이 친구넘은 이미지 프로세싱에 대해서 잘 알고 있었다. 소스로 구현만 하면 된다고 했다.
심심도 하고 할 일도 없어서 옆에서 로직을 설명 좀 해달라고 했다.
이미지 회전 로직:
난 이 90° 회전하는 소스만 되면 180° 는 90° 회전한 이미지를 한번더 90° 회전하면 되고 -90° 는 90° 회전을 3번하면 되지 않겠냐고 했다. 근데...
친구넘 왈: 그럼 퍼포먼스에 문제가 있다고 한다. --_-;
나: 아~ 젠장...
이미지 회전 소소: Dev-C++ Version 4.9.9.2 에서 C로 작성
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#define width 4
#define height 3
void printFunc(int, int, int[]);
void rightTurn(int, int, int[], int[]);
int main(int argc, char *argv[])
{
int after[width*height] = {0};
int before[] = {00, 01, 02, 03,
10, 11, 12, 13,
20, 21, 22, 23};
printf("============= Before =============\n");
printFunc(width, height, before);
// 우측으로 90도 회전
rightTurn(width, height, before, after);
printf("============= After =============\n");
printFunc(height, width, after);
printf("Press ENTER to continue...\n");
getchar();
return 0;
}
void printFunc(int w, int h, int aa[])
{
int i;
for(i=0; i<w*h; i++)
{
if(i == (w*h)-1)
{
printf("%02d\n", aa[i]);
}
else
{
if(0 == (i+1)%w)
{
printf("%02d,\n", aa[i]);
}
else
{
printf("%02d, ", aa[i]);
}
}
}
printf("Result: ");
for(i=0; i<w*h; i++)
{
if(i == (w*h)-1)
{
printf("%02d\n", aa[i]);
}
else
{
printf("%02d, ", aa[i]);
}
}
}
void rightTurn(int w, int h, int before[], int after[])
{
int i;
int j;
int resultCnt = 0;
for(i=0; i<w; i++)
{
for(j=1; j<=h; j++)
{
after[resultCnt] = before[(w * h)-(w * j)+i];
resultCnt++;
}
}
}
#include <stdio.h>
#include <stdlib.h>
#define width 4
#define height 3
void printFunc(int, int, int[]);
void rightTurn(int, int, int[], int[]);
int main(int argc, char *argv[])
{
int after[width*height] = {0};
int before[] = {00, 01, 02, 03,
10, 11, 12, 13,
20, 21, 22, 23};
printf("============= Before =============\n");
printFunc(width, height, before);
// 우측으로 90도 회전
rightTurn(width, height, before, after);
printf("============= After =============\n");
printFunc(height, width, after);
printf("Press ENTER to continue...\n");
getchar();
return 0;
}
void printFunc(int w, int h, int aa[])
{
int i;
for(i=0; i<w*h; i++)
{
if(i == (w*h)-1)
{
printf("%02d\n", aa[i]);
}
else
{
if(0 == (i+1)%w)
{
printf("%02d,\n", aa[i]);
}
else
{
printf("%02d, ", aa[i]);
}
}
}
printf("Result: ");
for(i=0; i<w*h; i++)
{
if(i == (w*h)-1)
{
printf("%02d\n", aa[i]);
}
else
{
printf("%02d, ", aa[i]);
}
}
}
void rightTurn(int w, int h, int before[], int after[])
{
int i;
int j;
int resultCnt = 0;
for(i=0; i<w; i++)
{
for(j=1; j<=h; j++)
{
after[resultCnt] = before[(w * h)-(w * j)+i];
resultCnt++;
}
}
}
'Dev > c, c++' 카테고리의 다른 글
3차원 배열을 동적할당 해보자... (3) | 2008.03.28 |
---|---|
문자열 앞뒤 공백 지우기(수정) (0) | 2008.03.26 |
대부분의 형을 문자열로 바꾸기 (0) | 2008.03.18 |