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

신무성님의 프로필 이미지
신무성

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

4-B

4-B 질문있습니다.

작성

·

96

·

수정됨

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

image.png

이 부분이 이해가 되질 않습니다.

HHT인 경우 '001'이 되어야 하지만, value가 1부터 *2로 증가해서 HHT에 해당하는 값을 저장할 때, a[i] | value (=4)에 의해 '100'이 저장되지 않나요??

비트의 순서가 뒤집힌거 같은데 상관없나요?

+

image.png

위에 go 함수에서 if(a[j] & i)로 비교에 a[j]를 사용하는데, a[j]에 4('HHT'를 저장했을 경우)가 저장되어 있으면 '100' 비교하는데 순서가 뒤집힌거 같아서 헷갈립니다.

a[j]에 저장되어 있는 값으로 나타내는 동전이 어차피 대칭이기 때문에 로직이 통과하는 것인가요?

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 무성님 ㅎㅎ

HHT인 경우 '001'이 되어야 하지만, value가 1부터 *2로 증가해서 HHT에 해당하는 값을 저장할 때, a[i] | value (=4)에 의해 '100'이 저장되지 않나요??

>>네 잘 이해하셨습니다. 다만, 로직에는 상관없습니다.

 

위에 go 함수에서 if(a[j] & i)로 비교에 a[j]를 사용하는데, a[j]에 4('HHT'를 저장했을 경우)가 저장되어 있으면 '100' 비교하는데 순서가 뒤집힌거 같아서 헷갈립니다.
>>

먼저 비트 연산이 대칭이 아니라면 순서가 중요한 경우가 많습니다.다만, 이 문제에서는 비트의 대칭성이 로직에 영향을 주지 않습니다.

비트 순서가 뒤집히더라도, 각 비트가 나타내는 동전의 상태는 변하지 않습니다.

예를 들어 'HHT'가 '001'로 저장되든 '100'으로 저장되든, 이는 단순히 비트의 표현 방식일 뿐 동전의 상태를 나타내는 본질은 변하지 않습니다.

문제의 본질은 각 비트 위치에서 앞면과 뒷면의 개수를 비교하여 최소값을 구하는 것이며 비트의 순서가 뒤집히더라도 각 비트 위치의 앞면과 뒷면의 개수는 동일하기 때문에 최종 최소값 계산에는 영향을 미치지 않습니다.

 

i의관한 코드설명

>>

i는 경우의 수입니다. 001, 010, 011 따위를 의미합니다.

원래는 i - 001과 HHT(001)이 대칭되어야 하지만

i - 100 이 되었을 때 대칭된 HHT(100)과 비교해도 본질자체(동전의 상태를 나타내는 경우의 수)는 변하지 않으므로 대칭되어도 상관없습니다.




또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


신무성님의 프로필 이미지
신무성

작성한 질문수

질문하기