Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

끄적끄적

프로그래머스 lv1 [비밀지도] - 비트연산자 본문

코테준비/프로그래머스

프로그래머스 lv1 [비밀지도] - 비트연산자

alstj_성공 2022. 4. 12. 21:01

출처 : https://programmers.co.kr/learn/courses/30/lessons/17681?language=cpp 

 

코딩테스트 연습 - [1차] 비밀지도

비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다

programmers.co.kr

 

 

주어진 숫자를 이진법으로 바꾸는 함수를 이용해서 푸는 방법을 생각하고 있었는데,

비트연산자를 사용하여 간단히 해결할 수 있는 문제였다.

 

int num = arr1[i] | arr2[i]

OR 연산 의미 

예를 들어 arr1[i]가 10001이고 arr2[i]가 10101이라면 num은 10101이 된다.

2진법에서만 사용할 수 있는 줄 알았는데 이를 이용하면 arr1과 arr2를 OR연산 시키고 2진수로 바꾸어준다.

따라서 이진수로 바꾸는 함수 사용할 필요 없음.

또한 값이 작으면 00010 이렇게 나타나는게 아니라 10이렇게 나타나기 때문에 이런 경우를 처리해주기 위해 n만큼 돌려줘야 한다.

 

num = num>>1

num을 오른쪽으로 1만큼 shift하라는 의미 

만약 num이 1001이었고, 이를 적용한다면 0100 이런식으로 됨.

 

먼저 나누는 값을 나중에 추가하도록 해야하므로

tmp = '#' + tmp 이렇게 써준 것.