mil1445   1년 전

계속 틀리길래 다른 질문글 참조하면서 풀어봤는데도 잘 모르겠습니다 ㅠㅠ

zoso   1년 전

안녕하세요?

올려주신 코드를 수정해서 정답을 유도해봤습니다.

지금은 해결하셨는지 모르겠지만 제가 유도해낸 방법은

이 문제의 설명을 다시 읽으면 알 수 있는데

문제에선

'먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고

각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 

구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다.'

라고 되어있습니다. 

올려주신 코드와 접목하여 말하자면 10보다 작은 정수를 10곱하여 10보다 크거나 같은 상태에서

while 문에 진입하여야 한다는 것 입니다.

즉,

if (N<10) {

   temp = N * 10;

}

이 부분을

if (N<10) {

temp = N * 10;

 N *= 10;  

}

이렇게 바꾸셔야합니다.

그리고 또 한 가지 문제가 있는데

이 문제에서는 N의 범위를 0에서 부터 99까지로 두고 있습니다.

즉, N의 값으로 0이  들어오는 경우가 존재하는데

result의 값이 0이라면 0이 10보다 작다하여 If (N < 10)을 통과하여도

0에서 10을 곱하면 0이므로

while문에서는 0인 상태의 N과 (선언과 함께 0으로 할당한)result의 0이 같아

while 문을 그냥 통과하고 count변수를 증가시키지 못합니다.

그러므로 result의 값을 0이 아닌 다른 수로 바꾸어야만 합니다.


이상 제가 알아본 방안이였습니다. 

설명이 부족했다면 죄송합니다.

틀린 부분 있다면 부디 지적해주세요. 

( 제가 임의로 고쳐본 코드 )

#include

int main()
{
  int N;
  int count = 0;
  int temp = 0;
  int result = -1; // 임의로 -1을 할당하였습니다.
  int fir, sec = 0;
  scanf("%d", &N);
  temp = N;

  if(N<10)
  {
     temp = N*10;
     N *= 10; // while문 진입 전에 구하고자하는 N값을 10의 자리숫자로 만들어야합니다.
  }

  while (N != result)
  {
     fir = temp % 10;
     sec = temp / 10;
     result = ((fir+sec) % 10) + (fir * 10);
     temp = result;
     count++;
  }
  printf("%d", count);

}

댓글을 작성하려면 로그인해야 합니다.