article thumbnail image
Published 2020. 10. 2. 22:08

#10726 : 이진수 표현

[코드]

SWEA 10726 : 코드

[코드설명]

  ① main

테스트케이스를 TC에 입력 받고, for문으로 TC만큼 실행을 반복한다.

정수 N, M을 변수 N, M에 담고 while문으로 N과 M이 1 ≤ N ≤ 30 , 0 ≤ M ≤ 108을 만족할 때까지 입력 받는다.

N과 M을 입력 받으면 bitcheck함수로 인자를 전달하고, 결과를 테스트케이스 번호와 함께 출력한다.

 

  ② bitcheck

main함수에서 N과 M을 전달받는다.

정수 M의 마지막 N개의 비트가 모두 1인지 검사하기 위해서 정수 M의 2진수 표현에서 마지막 N비트만큼을 추출했다. 마지막 N비트는 1, 나머지는 0으로 채워진 수 ~(~0<<N)M비트 AND연산하면 M의 2진수 표현에서 마지막 N비트만큼을 추출할 수 있다. M & ~(~0<<N) 연산 후에 연산 결과를 변수 M에 저장했다.

추출한 마지막 N비트가 모두 1인지 확인하기 위해서 비트 XOR연산을 이용했다. M ^ ~(~0<<N) 연산을 하면 마지막 N개의 비트만 NOT연산을 한 것 같은 결과가 나온다. 만약 마지막 N개의 비트가 모두 1이라면 연산 결과는 0이 되고, 아니라면 0이 아니게 된다. 따라서 if문에서 M이 0이면 ON을 반환하고, 0이 아니면 OFF를 반환한다. 

 

[실행결과]

SWEA 10726 실행결과

/*

#include<stdio.h>
#include<math.h>
char* check_bits(int N, int M);

int main()
{
int TC = 0, N, M;

printf("testcase : ");
scanf("%d", &TC);
for (int t = 1; t <= TC; t++)
{
printf("\nN M : ");
scanf("%d %d", &N, &M);

printf("#%d %s\n", t, check_bits(N, M));
}
}
char* check_bits(int N, int M)
{
int bit;

bit = M & ~(~0 << N);

return (bit == pow(2, N) - 1) ? "ON" : "OFF";
}

*/

#8931 : 제로

[코드]

SWEA 8931 : main함수
SWEA 8931 : zero함수

[코드설명]

  ① main

테스트케이스를 입력 받아 TC에 저장하고, for문으로 TC만큼 실행을 반복한다.

정수 K를 입력 받아 변수 K에 저장하고, while문으로 K가 1 ≤ K ≤ 100,000 조건을 만족할 때까지 입력 받는다.

K를 zero함수로 전달하고, 반환값을 테스트케이스 번호와 함께 출력한다.

 

  ② zero

zero함수는 main함수로부터 정수 K를 전달받는다.

동아리 지출 금액을 저장하기 위해서 malloc함수로 포인터 변수 numarr에 sizeof(int)*K크기의 메모리를 할당한다.

for문으로 동아리 지출 금액 추가와 삭제를 위한 입력을 K번 반복한다.

numarr[index]에 동아리 지출 금액 추가 혹은 삭제를 위한 정수를 입력 받고, if문으로 numarr[index]가 0인지 확인한다.

numarr[index]가 0이면 numarr[index-1]에 0을 대입해서 이전 인덱스에 저장된 값을 삭제하고, index가 2감소한다.(다음 반복으로 넘어가면서 index가 1증가하기 때문에 여기서 2를 감소해야 한다.) numarr[index]가 0이 아니면 다음 반복으로 넘어가서 index가 1증가된다.

두 번째 반복문에서 k가 0부터 index전까지 증가하면서 sum에 numarr[k]값을 저장해간다. 모든 반복문이 끝나면 free함수로 numarr에 할당된 메모리를 해제하고, sum을 반환한다.

 

[실행결과]

SWEA 8931 실행결과

'알고리즘' 카테고리의 다른 글

[SWEA] 10059/9700  (0) 2020.11.06
[SWEA] 9317/10804  (0) 2020.10.31
[SWEA] 9940/10032  (0) 2020.09.24
[SWEA] 10570/10200  (0) 2020.09.18
C정리 3주차  (0) 2020.07.11
복사했습니다!