해커랭크 요약 :
이 도전은 당신이 C의 비트연산자에 대해 배울 수 있게 해줄 것이다.
CPU 안에서 덧셈, 뺄셈, 곱셈, 나눗셈과 같은 수학적 연산은 비트 레벨로 이루어진다. C 프로그래밍에서 비트 수준 연산을 수행하기 위해 아래에 설명한 비트 전송률 연산자를 사용한다.
요구사항 :
제한사항은 2<=n<=10^3이고 2<=k<=n일 때,
1에서 n까지의 수열은 S이다.
공백으로 구분된 n과 k를 받아 S에서 뽑은 수인 a와 b(a와 b는 같지 않고 a<b이다)를 bitwise 연산하라
bitwise연산된 결과가 k보다 작은 경우를 출력한다
기능설계 :
공백으로 구분된 n과 k를 scanf로 받아
n을 1부터 n-1까지의 for문을 써서 a와 b를 가져온다 (a와 b는 같지 않고 a<b이다)를 AND(&), OR( | ), XOR(^) bitwise 연산한다
a와 b가 bitwise 연산된 결과가 k보다 작은 경우를 printf로 출력한다
코드 :
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
//Complete the following function.
void calculate_the_maximum(int n, int k) {
int a, b;
int and_res=0, or_res=0, xor_res=0;
for (a=1; a<n; a++)
{
for (b=n; a<b; b--)
{
if((a&b)<k && (a&b)>and_res)
{
and_res = a&b;
}
}
for (b=n; a<b; b--)
{
if((a|b)<k && (a|b)>or_res)
{
or_res = a|b;
}
}
for (b=n; a<b; b--)
{
if((a^b)<k && (a^b)>xor_res)
{
xor_res = a^b;
}
}
}
printf("%d\n%d\n%d\n", and_res, or_res, xor_res);
}
int main() {
int n, k;
scanf("%d %d", &n, &k);
calculate_the_maximum(n, k);
return 0;
}
다이어그램 :
추측한 학습목표 :
비트연산을 사용해봐
원하는 조건들을 and를 사용해서 중첩해서 적용할 수 있니?
for문이랑 if문을 제대로 사용해볼래?
함수 분리 좀
and_res에서 왜 32715라는 값이 출력됐을까? -> 모두 0으로 초기화해서 해결
'C&C++ 개발' 카테고리의 다른 글
11. Conditional Statements in C (0) | 2018.12.14 |
---|---|
9. Sum of Digits of a five Digit number (0) | 2018.12.13 |
8. Boxes through a tunnel (0) | 2018.12.11 |
7. Digit Frequency (0) | 2018.12.10 |
6. For Loop in C (0) | 2018.12.08 |