안녕하세요 j.sieun 입니다.
오랜만에 자바에 알고리즘에 대해서 포스팅을 합니다.
친구랑 진수에 대해서 얘기하다가 이걸 가지고 알고리즘을 한번 만들어봐야겠다 생각하고 한번 코딩해보았습니다.
우선 제가 1차로 코딩한 것이므로 소스 "단순화" 를 거치지 않은 즉, 다듬어 지지 않은 코딩이라고 볼수 있습니다.
문제 4자리 16진수 숫자 또는 문자열을 가지고, 이것을 2진수로 변환하여라
그럼 소스부터 보도록 하겠습니다.
아주 간단히 주석처리를 해서 참고로 하시면됩니다.
이 알고리즘을 만들기 위해서는 아스키 코드를 알고 계셔야 합니다.
//저는 구글링해서 아스키 코드를 보고 풀었습니다. :)
참고..입니다.
그럼 소스 해석을 하도록 하겠습니다.
1.메인함수 (public static void main) 에서는 큐에다가 값을 추가하는 부분이 되겠습니다.
//편의상 큐에다가 값을 추가한것이고, 배열로 하는 방법도 있습니다. :)
2. HexCode 함수에서는 큐에 저장된 값들을 하나씩 뽑아서 그것들을 ConverSion 라는 함수로 보내서
"2진수" 로 변환 하는 함수가 되겠습니다.
여기서 가장 중요한 부분은
이부분이 되겠는데요.
_hex[j] = _str.charAt(j);
_str 의 문자열의 문자 "하나" 씩 char 형으로 _hex 배열에 추가 합니다. 그렇게 되면 _hex는 아스키 코드표에 있는 값들로 저장이 됩니다.
그리고 16진수가 어떤 개념인지 아셔야 합니다. 16진수란? 예를 들면 "17" 을 16진수로 변환하면 "11" 이 되는 것으로 알고 계시면 됩니다.
여기서 아스키 코드를 보시면, 0~9까지는 16진수가 0~9까지 이루어져있다가 10~15까지는 A~F 로 이루어져 있습니다. 그 이후로도 계속 해서 반복되어있다는 것을 볼수 있습니다.
그래서 처음 조건문에서 0~9까지 에서는 char 의 값을 그대로 변환합니다.
//제 소스에서는 _hex[j] - '0' 으로 되어있는데 굳이 '0' 은 안넣어도 됩니다.
그리고, 그 다음 조건문에서는 _hex[j] - 'A' + 10 한 상태에서 ConverSion 함수로 보내는 것으로 되어있습니다.
이유는 아스키 코드에서 A 의 값부터 F 의 값은 10진수로는 65~70으로 되어있는데 이를 10~15 인 값으로 변환할려면 'A' 를 빼고 + 10 을 해야 10 ~ 15 가 됩니다. 이렇게 해야 4자리 2진수로 변환 할 수 있습니다.
10을 더 한 이유는 10부터는 숫자가 아닌 알파벳 A부터 시작하기 때문에 10을 더했습니다.
설명을 좀더 쉽게 하자면, 16진수가 0~9까지와 10부터는 알파벳 A~F(15) 로 되어있는 진수를 뜻합니다.
그래서 이것을 2진수로 나타낼려면 A가 가지고있는 고유 아스키 번호가 아닌, 10으로 변환후 2진수로 나타내어야 합니다. 그래서 저는 알파벳이 들어간 부분은 A or a 를 뺀후 10을 더했습니다. 그렇게 되면 10~15 로 변환되어서
2진수로 나타낼수 있기 때문입니다.
3. ConverSion 함수에서는 0~15까지의 값을 2진수로 나타내는 아주 간단한 함수가 되겠습니다.
첫번째 반복분을 보자면, 왜 i의 초기값이 3인가에 대해서 의문점이 들텐데요 그이유는 간단합니다.
아주 쉽게 그림으로 설명하도록 하겠습니다.
이진수로 값을 표현할때 밑에서 부터 값을 표현하기 때문에 i의 초기값을 3으로 두었습니다.
4. Output 함수 부분은 이러한것들을
_OutputHex 라는 큐에 저장했다가 차례대로 값을 출력하는 부분이 되겠습니다.
이렇게 값이 4자리 16진수를 2진수로 출력이 된 부분을 보실수 있겠습니다.
이상 포스팅을 마치도록 하겠습니다.
감사합니다.
기타 이해 안되는 부분 있으시면, 댓글 남겨주시면 답변 해드리도록 하겠습니다.
'java' 카테고리의 다른 글
#쉽게 푸는 알고리즘 #3 최대공약수,최소공배수 (0) | 2017.02.07 |
---|---|
#쉽게 푸는 알고리즘 #1 [연속되는 문자열 압축] (0) | 2017.01.30 |
이클립스 네온설치방법 (2017 1/23) (2) | 2017.01.23 |
꿀팁 자바-자바스크립트(prompt)처럼 사용하기 (0) | 2016.12.29 |
쉽지만 어려운 #Java #자바 #성공적 12.1,2차원 배열 (0) | 2016.11.11 |