강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

김찬민님의 프로필 이미지
김찬민

작성한 질문수

알고리즘 교안 163p "2진법 변환" 부분 질문

작성

·

346

0

이 부분에서 파란색으로 밑줄 친 부분이 왜 필요한 지 모르겠습니다. 또한 왜 저 표현이 16진수로 표현하는건지도 잘 이해가 가지 않습니다. for문 안에 cout<<a;만 쓰더라도 저희가 원하는 출력이 이뤄진다고 생각합니다. (2로 모듈러연산을 취해주었기 때문에 벡터 v에는 0과1밖에 없을텐데 왜 for문 안에 조건을 저런식으로 잡았는지 잘 이해가 가지 않습니다.)

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

알고리즘 교안 163p의 “2진법 변환” 부분에서 파란색 밑줄이 있는 부분은 16진수로 표현하기 위한 부분입니다. 저 표현은 16진수로 표현하는 방법을 사용하였는데, 이는 숫자가 10 이상인 경우에 대해서 알맞게 변환하기 위한 것입니다. 만약에 for문 안에서 아래와 같이 작성한다면 16진수로 표현할 때 저표현을 사용하지 않아도 출력은 가능할 것입니다.

for(int i = v.size()-1; i >= 0; i--){
    cout << v[i];
}

하지만, 저표현을 추가한다면 16진수로 표현할 때 십진수로 표현하는 것과 마찬가지로 0~9까지는 그대로 출력되고, 10부터는 A, B, C, D, E, F와 같이 알파벳으로 표현이 가능해집니다.

따라서, 저 표현을 추가한다면 16진수로 표현할 때 더 직관적이고 보기 좋은 표현이 가능합니다.

그리고 for문 안에 조건을 위와 같이 작성한 이유는 2진수를 변환할 때 2로 나누면서 나머지를 구하기 때문입니다. 나머지를 구해서 벡터 v에 넣은 뒤에 출력하기 때문에 v.size()-1부터 0까지 역순으로 출력하기 위해 저렇게 조건을 작성한 것입니다.

저렇게 조건을 작성한다면 벡터 v에는 2진수의 각 자릿수들이 역순으로 들어가게 되고, 출력 시에는 역순으로 출력되어서 원하는 결과를 얻을 수 있게 됩니다.

이해가 잘 되셨는지 모르겠지만, 추가적인 궁금한 점이 있으면 댓글로 답변해주세요. 감사합니다.

김찬민님의 프로필 이미지
김찬민

작성한 질문수

질문하기