문제 - 2^k <= n 을 구하라
예시 - N을 256 입력시 k의 최대값 8이 나와야한다.
#include <stdio.h>
int main(){
int n;
int i;
int count=0;
scanf("%d", &n);
i = 1;
while(1){
i=i*2;
if(i>n){
break;
}
count++;
}
printf("값 %d \n", count);
return 0;
}
팁 - 2의 k승을 구하는 문제는 결국 i=i*2를 하면서 몇번했는지 카운트하는 것이다.
15를 입력하면 3이 나와야하고 16을 입력하면 4, 17을 입력하면 4가 나와야한다.
그림으로 보자
i n count
2 16 1
4 16 2
8 16 3
16 16 4
32 ------- n이 더 크거나 같아야하므로 여기서 종료 2의 4승까지 구해진다.
2 15 1
4 15 2
8 15 3
16 ------- n보다 누적된 i값 16이 더 크므로 종료한다. n이 15일땐 2의 3승까지 구한다.
'알고리즘' 카테고리의 다른 글
[알고리즘] 문자열 뒤집기 (0) | 2019.12.04 |
---|---|
[알고리즘] 달팽이배열 (0) | 2019.12.04 |
[알고리즘] 소수 구하기 (0) | 2019.12.04 |
[알고리즘] 최대 공약수, 최소공배수 구하기 (0) | 2019.12.04 |
[알고리즘] 삼각형 별찍기 문제 (0) | 2019.12.04 |