posted by REDFORCE 2017. 10. 9. 22:02

간혹 프로그래밍 기본 문제로 최대공약수와 최소공배수를 구하는 문제가 나옵니다.


이번 글에서는 위 문제에 대한 다양한 해결 방법이 존재하겠지만

유클리드 호제법을 이용하여 해결하는 방법을 적어두겠습니다.



A. 최대공약수


유클리드 호제법은 두 수를 입력받았을 때,


1. 큰 수에서 작은 수를 나눈 나머지를 구한다.

2. (1)에서의 과정에 작은 수를 다시 한번 큰수로 입력, 나머지를 작은 수로 입력하여 (1)의 과정을 계속 반복한다.


3. 나머지가 0이 되면 (2)까지의 과정을 종료한다.

4. 마지막으로 나눈 값이 최대공약수이다.



B. 최소공배수


최소 공배수를 구하는 방법은 위에서 구한 최대 공약수로 처음의 큰 수와 작은 수의 곱을 나누면 된다.


식 : 큰 수 * 작은 수 / 최대 공약수




posted by REDFORCE 2017. 9. 15. 16:38

바이트에서 1인 비트의 갯수를 새는 방법은 여러가지가 있으나

본 글에서 적는 방법은 MSDN에서 제시하는 방법을 기술하고자 합니다.


간단히 비트 플래그 갯수를 새는 방법은 다음과 같은 코드로 수행할 수 있습니다.


WORD GetNumberOfBits( DWORD dwMask )
{
    WORD wBits = 0;
    while( dwMask )
    {
        dwMask = dwMask & ( dwMask - 1 ); 
        wBits++;
    }
    return wBits;
}

위 코드는 MSDN에 적혀있는 코드입니다.


API 형식의 자료형으로 적혀있어서 기본 C++ 형태로 바꾼 코드는 다음과 같습니다.




가볍게 MSDN 코드를 바꾸어 테스트 코드와 비트 갯수를 세는 코드만 적어두었습니다.



posted by REDFORCE 2017. 9. 5. 17:19

흔히들 대학과제로든 시험으로든 면접에서든

C++과 Java의 차이점에 대해서 기술해보라는 문제가 자주 등장한다.


최근 김포프님의 포프tv를 보면서 C++이 Java보다 어떤 점들이 다른지에 대해서

이야기를 들은 적이 있었는데, 궁금해서 구글에 뒤져보다보니


위키에 비교가 잘 정리되어 있어서 블로그에 옮겨적게 되었다.



1. 두 언어는 일단 설계 목표부터가 다르다.


 - 역사적으로 C++은 C를 확장하여 파생 된 언어이다. 절차적 프로그래밍 언어에 효율적인 실행을 목표로 설계 되었고, 정적 자료형 검사, 객체 지향 프로그래밍, 예외처리, RAII, 제너릭 프로그래밍을 지원한다. 범용 컨테이너와 알고리즘을 포함한 C++ 표준 라이브러리가 추가 되어있다.


 - JAVA는 임베디드 제품(가전 제품 등)에 탑재 되어 네트워크 컴퓨팅을 지원하기 위해서 만들어졌다. 항시 Java는 가상 머신 위에서 실행 된다는 특징이 있으며 안전성과 이식성이 높은 것이 장점이다. 하위 플랫폼을 완벽히 추가시켜주는 광대한 분량의 라이브러리를 가지고 있고, JAVA는 C와 비슷한 문법을 사용하나 직접적인 호환성은 없다.



2. 비교 표


 C++

JAVA 

 C 소스 코드와 하위 호환성

다른 언어와 소스 코드 호환성은 없음 

직접적인 시스템 라이브러리 호출 가능 

자바 네이티브 인터페이스를 이용 

저수준 시스템 접근 가능 

안전하게 보호되는 가상 머신 위에서 실행 

선택적 자동 경계 검사 

항상 자동 경계 검사함 

부호없는(unsigned) 연산 지원

부호 없는 연산 지원 안함 

값에 의한 매개변수 전달 또는 참조에 의한 매개변수 전달 

항상 값에 의한 매개변수 전달. 매게변수로 객체에 대한 참조값을 사용할 수는 있다. 참조 대상의 내용을 변경할 수는 있지만 참조값 자체는 변경할 수 없다. 메서드 호출 후에도 참조하는 객체는 다른 객체로 바뀌지 않을 것이다.

명시적 메모리 관리, 가비지 컬렉션은 추가적으로 라이브러리를 이용해야 함 

항상 자동 가비지 컬렉션 

명시적인 자료형 재정의 허용 

자료형 안정성에 엄격함 

C++ 표준 라이브러리는 적절한 범위까지 지원함

광대한 분량의 라이브러리 

연산자 오버로딩 

연산자 재정의 할 수 없음 



그 외에도 방대한 내용을 적을 수 있을 정도로 차이가 있으나...

기본적으로는 위 사항 정도만 숙지하고 있어도 어느정도 큰 차이점들은 알 수 있을 것으로 생각한다.


더 자세한 차이 점에 대해서는 아래 위키에서 참조!!


위키백과 - 자바와 C++의 비교