http://www.wearethebest.co.kr/blog/trackback/266
http://www.wearethebest.co.kr/blog/trackback/265
http://www.wearethebest.co.kr/blog/trackback/264
프로그래머 능력 매트릭스
Posted at 2010/05/26 02:40// Posted in 개발/개발이야기http://www.wearethebest.co.kr/blog/trackback/263
파이썬과 C/C++의 가독성 차이
Posted at 2010/05/25 23:06// Posted in 개발/개발이야기알고스팟 (http://algospot.com/ )에서 알고리즘 문제를 풀었습니다.
가상의 미팅 주선 회사에서 주선 성공률을 높이기 위한 '짝맞추기'라는 알고리즘 문제인데요. (http://algospot.com/zbxe/?mid=aoj&action=problem&no=100 )
다음은 이 문제의 1등을 기록한 "혀콰"님의 C/C++ 소스입니다.
#include<stdio.h>
#include<algorithm>
int t, n, a, b, dab;
int o, i, j, j2, p, cnt1[2005], cnt2[2005], cnt;
char c[100005];
int main() {
scanf("%d\n", &t);
for (o=1;o<=t;o++) {
scanf("%d\n", &n);
gets(c);
i=0; p=0; a=0; cnt=0;
while(c[i]!='\0') {
if ('0'<=c[i] && c[i]<='9') {
a*=10;
a+=c[i]-'0';
}
else if (c[i]==' ') {
if (p) a*=-1;
cnt1[a+1000]++;
cnt++;
a=0; p=0;
}
else if (c[i]=='-') p=1;
i++;
}
if (cnt != n) {
if (p) a*=-1;
cnt1[a+1000]++;
}
gets(c);
i=0; p=0; b=0; cnt=0;
while(c[i]!='\0') {
if ('0'<=c[i] && c[i]<='9') {
b*=10;
b+=c[i]-'0';
}
else if (c[i]==' ') {
if (p) b*=-1;
cnt2[b+1000]++;
cnt++;
b=0; p=0;
}
else if (c[i]=='-') p=1;
i++;
}
if (cnt != n) {
if (p) b*=-1;
cnt2[b+1000]++;
}
j=0; j2=0; dab=0; cnt=0;
while (1) {
if (cnt1[j] && cnt2[j2]) {
cnt1[j]--;
cnt2[j2]--;
dab += abs(j-j2);
cnt++;
if (cnt==n) break;
}
else if (!cnt1[j]) j++;
else j2++;
}
printf("%d\n", dab);
}
return 0;
}
다음은 파이썬으로 작성된 "JM"님의 소스입니다.
import sys
rl = sys.stdin.readline
cases = int(rl())
for cc in xrange(cases):
rl()
a = map(int, rl().split())
b = map(int, rl().split())
a.sort()
b.sort()
print reduce(lambda a, b: a + b,
[abs(c - d) for c, d in zip(a, b)])
두 언어의 소스 가독성을 비교해 보니 어떠신가요?
http://www.wearethebest.co.kr/blog/trackback/262
-
2010/06/07 05:27 [Edit/Del] [Reply]
LIBe안녕하세요. 웹에서 검색을 하다가 우연찮게 페이지를 발견해서 글을 남깁니다.
위의 "혀콰"님의 C++ 코드와 "JM"님의 python 소스코드의 가독성을 따지기에는 무리가 있다고 생각합니다.
우선 "혀콰"님의 코드 경우 속도를 최대한 빨리 하기 위한 시도의 결과이다 보니 코드가 더러워진 감이 없잖아 있는것 같기도 합니다만, python 소스코드와 C++ 소스코드의 가독성을 비교 하려면, 그래도 C++에서 간결하게 짜여진 소스코드를 놓고 비교를 해야 하는것이 아닐련지 라는 생각이 드네요.
물론 python으로 구현 하였을경우 가독성에 이점이 발생할 수 있다는 생각을 합니다만, 위의 2개의 코드는 좀 무리가 있다고 봅니다 :)
개인적으로 제가 짠 소스코드와 비교를 한번 해보심이 어떨련지 생각합니다. 나름 C++로 간결하게 짰다고 생각합니다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
int main() {
int tn;
scanf("%d", &tn);
while(tn--) {
int n;
scanf("%d",&n);
vector<int> a(n), b(n);
for(int i=0;i<n;++i) scanf("%d",&a[i]);
for(int i=0;i<n;++i) scanf("%d",&b[i]);
sort(a.begin(),a.end());
sort(b.begin(),b.end());
ll ret = 0;
for(int i=0;i<n;++i) ret += abs(a[i]-b[i]);
printf("%lld\n", ret);
}
}
안녕하세요? 홍환민입니다.
델파이, C/C++을 주력으로 사용하고 있는 윈도우즈 어플리케이션 개발자입니다. 심리학, 영화, 음악, 협업, 애자일에 관심이 많습니다. 감사합니다.