두번째 코딩테스트 (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