[Algorithm] 이진수로 변경 & 산모양 출력

문제1

10 진수를 입력으로 받아 이진수로 변경하는 프로그램을 작성하시오.

입력

  • 입력으로 1000 이하의 자연수가 주어진다.

출력

  • 이진수로 변환된 자연수

풀이

이진수로 변환은 2로 계속나누다가 몫이 1이거나 없을때 지금까지 나온 나머지를 역순으로 출력하면 된다,

11 % 2 = 1

11 / 2 = 5

---

5 % 2 = 1

5 / 2 = 2

---

2 % 2 = 0

2 / 2 = 1

---

1

---

1011

따라서 점화식을 k의 2진수 출력인 print(k)로 정한다.

print(k) = print(k/2) (+) cout << k%2 

void print(int n)
{
  if (n > 1) print(n / 2);
  cout << n%2;
}


int main()
{
  int n;
  cin >> n;

  print(n);

}

문제2

봉우리가 여러개인 산 모양을 출력한다. 산 모양은 그림과 같고 좌우 대칭이다.

출력 예시를 보면 

1 -> 1

2 -> 121

3 -> 1213121

즉 제일 높은 봉우리 옆에는 이전 크기의 봉우리가 양 옆에 온다.

따라서 점화식을 세워보면

m(k) = m(k-1) (+) cout << k (+) m(k-1)

void m(int n)
{
  if (n == 1) {
    cout << 1;
    return;
  }
  m(n - 1);
  cout << n;
  m(n - 1);
}

int main()
{
  int n;
  cin >> n;
  m(n);

}