C/C++ 에서, 배열을 비교하는 함수가 있나요?

pogusm의 이미지

int a[10] = {1,2,3,4,5,6,7,8,9,10};
int b[20] = {6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};

일때, 위 두개를 비교해서, "5개가 일치합니다" 라는 결과 얻고 싶은데..

for(int i=0; i<10; i++) {
    for(int j=0; j<20; j++) {
        비교문
    }
}

이런 방법말고 보다 세련되고 빠르고 편한 함수같은게 혹시 있나요?

(Qt에서 연습중입니다)

dingkyu의 이미지

제 수준에선 제시한 방법 이상 깔끔한 방법을 찾기 어려울듯 한데요...
다른 아름다운 방법이 있을까요 ?

고민이 많아 고민인 애늙은이 입니다.

jick의 이미지

C++이라면, set에다가 배열 하나를 다 집어넣은 다음 두번째 배열로 loop를 돌면서 있는지 체크하면 훨씬 빠르게 할 수 있을 것 같습니다.

(물론 C에서도 set 같은 걸 짜면 되긴 하지만 귀차니즘의 압박이...)

boram1288의 이미지

sorting이 되어 있다는 가정하에서는 비교횟수를 줄일 수 있을 것 같긴한데.
sorting을 해야되면 별 이득이 없어보이네요.

익명 사용자의 이미지


데이터가 많으면 결국 sort하는게 유리할겁니다..
set 도 일종의 sort라고 볼 수 있고요..
미리 sort된 데이터에 대해서는 여러가지 방법들을 적용해 볼 수 있을거고요..

sort를 할거라면, 두 배열을 합쳐서 sort한 다음에,
연속된 두 숫자가 같은지를 체크하는 것도 깔끔은 해보이겠네요.. (efficient한지는.. )

익명 사용자의 이미지

이 경우 1개의 어레이에 중복된 데이터가 이미 있는 경우,
어떻게 처리할 것인지에 대해서 미리 정의해야겠네요..

원글에서 이런 고민이 없는 걸 보면,
이미 두개의 배열 자체를 set type으로 만드는게 맞을듯도 싶고요..

drinkme의 이미지

for(i=0, j=0, cnt=0; i<10 && j<20;)
{ if (a[i]==b[j]) { cnt++; i++; j++; } else if (a[i] <b[j]) i++; else j++;
}

printf(”%d개가 일치합니다\n”, cnt);

pogusm의 이미지

그냥 간단한 함수 같은건 없나보네요.

ㅠㅠ

C++ 의 set 이라는건 제가 잘 몰라서... 함 찾아봐야겠네요 ㅋ

cleansugar의 이미지

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

allinux의 이미지

set이라는게 보여서 논외(!)적으로......
python 이라면

a = [1,2,3,4,5,6,7,8,9,10]
b = [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]

print len(set(a) & set(b))

정도 되겠네요.

ps. 여러언어 버전으로 나올까...두렵군요-.-;

neocoin의 이미지

두려울꺼 있나요.

ruby

a = [1,2,3,4,5,6,7,8,9,10]
b = [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]
puts (a&b).size
kaeri17의 이미지

소팅 하면 보통 소팅은 O(NlogN) 이고 비교는 O(N)이니 그냥 O(NlogN) 정도면 충분히 비교 가능합니다. 2중루프면 O(N^2)정도 되고요. 배열이 많이 커진다면 정렬 뒤 비교하는게 나을 것 같네요.

jick의 이미지

배열이 정말 크다면 hash table을 이용하면 expected O(N)으로 때려잡을 수 있습니다. (물론 worst case는 훨씬 안좋아지겠죠.)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.