알고리즘에 관해 질문드립니다ㅜㅜ

charnull의 이미지

알고리즘 과제 중인데

갈피를 못잡아서 이렇게 질문드립니다ㅜㅜ

3 2 3 라는 입력을 받으면

3 보다 낮은 숫자 0,1,2
2 보다 낮은 숫자 0,1
3 보다 낮은 숫자 0,1,2

을 가지고 숫자 조합을 만드는건데

3 2 3 입력시

출력 값이

000, 001, 002, 010, 011, 012, 100, 101, 102, 110, 111, 112, 200, 201, 202, 210, 211, 212

이런식으로 출력이 되야 하는데

몇시간째 고민중인데 계속 헷갈리고

중복문을 어떻게 만들어야할지....

다중 포문으로 하려고 하는데 하다보면 계속 생각이 꼬이고 꼬이고 하면서 계속 막힙니다ㅜㅜ

어떻게 처리하면 될지 조언 좀 부탁드립니다ㅜㅜㅜ

rgbi3307의 이미지

가장 간단한 방법은 for 루프를 아래와 같이 3중으로 돌리는 겁니다.

for (i = 0; i < 3; i++)
  for (j = 0; j < 2; j++)
    for (k = 0; k < 3; k++)
	printf ("%d%d%d, ", i, j, k);

From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))

charnull의 이미지

죄송한데 하나만 더 여쭤봐도 될까요ㅠㅠ

입력할 숫자의 개수 를 입력받고

숫자를 입력했을 때 의 과정은 어떻게 표현하면 좋을까요
(예) 입력할 숫자의 개수를 입력하시오 : 5
원하는 숫자를 입력하시오 : 2 3 4 5 6 )

위에 알려주신 방법은 숫자의 개수가 3가지 일 때만 가능한거 같은데..

4가지 숫자나 5가지 숫자를 입력 줄때 for 문이 4개 5개 돌아가야 될거 같은데

저런걸 처리해줄수있는 좋은 방법도 있나요ㅠㅠ?

익명 사용자의 이미지

hint

int number[] = { 2, 3, 4, 5, 6 };
for (i = 0; i < 5; i++)
  printf ("%d ", number[i]);

snowall의 이미지

재귀적으로 해보면 될 것 같은데요

n개의 수열을 입력 받아서, 그걸 a(1)~a(n)이라고 한다면요

a(1) = {0, 1, ..., a(1)-1}
a(2) = {0, 1, ..., a(2)-1}
...
a(n) = {0, 1, ..., a(n)-1}
<\code>
이런걸 만들어야 한다는 소리니까요
 
<code>
f(int k){
 if(k==n+1){
  for(i = 0; i<a(k); i++){
   printf(i);
   f(k+1);
   }
  }
 else{
  printf("\n")
 }
}
 
for(i = 0; i<n+1; i++){
 f(k);
}
<\code>
이런식으로 해보면 어떤가요?

피할 수 있을때 즐겨라! http://melotopia.net/b

yielding의 이미지

snowall님의 힌트가 결정적이군요. 재귀로 짜야합니다.
입력이 2, 3, 4, 5, 6이 들어왔다는 가정하에 ruby로는 이렇게..

#!/usr/bin/env ruby -wKU
 
class Object
  def deep_copy;
    Marshal.load(Marshal.dump(self))
  end
end
 
def process(arr)
  p arr
end
 
def candidates(depth)
  c = [[*0..1], [*0..2], [*0..3], [*0..4], [*0..5]]
  return c[depth]
end
 
def backtracking(arr, depth, n)
  arr.length == n ? process(arr) 
                  : candidates(depth).each { |c| backtracking(arr.deep_copy.push(c), depth+1, n) }
end
 
backtracking([], 0, 5)

Life rushes on, we are distracted

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.