두번째 코딩테스트 (1단계 - C언어)

친구가 진행하고 있는 코딩테스트를 Visual Stduio으로 직접 구현해보았습니다.

문제

주어진 수가 1이 될 때까지 다음 작업을 반복합니다.
1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.

예를 들어, 주어진 수가 6이라면 6->3->10->5->16->8->4->2->1 이 되어
총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수
solution을 완성하자. 단, 주어진 수가 1인 경우에는 0을,
작업을 500번 반복할 때까지 1이 되지 않는다면 -1을 반환하자.

 - 제한 >
• num은 1 이상, 8,000,000 미만인 정수입니다.

입출력 예>

n result
6 8
16 -4
626331 -1

입출력 예 설명>

입출력 예 #1>
   6->3->10->5->16->8->4->2->1 이 되어 총 8번 만에 1이 됩니다.
   
입출력 예 #2>
   16->8->4->2->1 이 되어 총 4번 만에 1이 됩니다.
   
입출력 예 #3>
   626331은 500번을 시도해도 1이 되지 못하므로 -1을 리턴해야 합니다.

접근 방법>

  • 일단 입력받은 숫자 num이 1인지 아닌지를 판별합니다. (여기서의 answer는 반복하는 숫자입니다.)
  • 맨 처음 answer을 0으로 설정하고 num이 1일때 반복분을 종료하고 num이 출력되는 형식으로 만듭니다.
  • while문을 활용하여 answer가 500이 되기 전까지 반복합니다.
  • 입력받은 숫자가 1이 아닌 후부터는 짝수일때와 홀수일때를 나눕니다. 그리고 문제에 나와있는 코드를 적습니다.
  • 500까지 반복하였을때도 1이 되지 않으면 answer은 -1로 설정하고 반환합니다.
  • 이때, 반복문을 진행하면서 answer값을 1씩 증가시킵니다.

내 풀이>

#include<stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int num) {
    int answer = 0;
    while (answer < 501) {
        if (num == 1) {
            return answer;
        }
        else if (num != 1) {
            if (num % 2 == 0) {
                num = num / 2;
                answer++;
            }
            else if (num % 2 == 1) {
                num = num * 3 + 1;
                answer++;
            }
            else {
                answer = -1;
                return answer;
            }
        }
    }
}

void main() {
    int number = 0, ans = 0;
    printf("입력 \n");
    scanf_s("%d", &number);
    ans = solution(number);
    printf("%d", ans);
}



Comments