11966번 - 2의 제곱인가?
주석이 필요 없는 간단한 코드라서 주석은 달지 않았습니다. 밑이 2인 log함수를 돌려서 a에 저장한 후, a뒤에 소숫점 부분이 0 이라면 1을 출력, 아니면 0을 출력하는 방식을 썼습니다.
반례나 아이디어에서 잘못된 부분을 찾아주시면 감사하겠습니다.
46%쯤에서 틀렸습니다가 나오네요.
미리 감사합니다.
코드 그대로 pypy3으로 하니 통과가 되네요... 근데 메모리초과나 시간초과가 아닌 틀렸습니다. 였는데 왜 그런걸까요 ㅠㅠ..
log는 실수연산을 사용해서 결과가 정확하지 않을 수 있습니다
이런문제는 정수연산만으로 푸시는게 좋을듯 합니다
예 ) (a&(a-1))==0)
log를 사용하지 않고 and 연산으로 구해낼 수 있는건가요? 비트(2진수)쪽으로 생각을 해봐야 하는걸까요?
네 (a&(a-1)) 는 Least Significant Bit 가 제거된 a와 같습니다
1011 -> 1010
1100 -> 1000
1000 -> 0000
비트 하나만 제거했는데 0이 되어버리면 2^n 형태라는거죠
다만 a > 0 를 만족해야 합니다
또는 for문을 이용하여 1인 bit를 세어주셔도 됩니다 구글에서 검색하면 대부분 이런 풀이가 나오네요
상세한 풀이 정말 감사드립니다! 더 찾아봐야겠네요! 다시 한 번 감사드립니다^^
댓글을 작성하려면 로그인해야 합니다.
chaos7061 5년 전
주석이 필요 없는 간단한 코드라서 주석은 달지 않았습니다. 밑이 2인 log함수를 돌려서 a에 저장한 후, a뒤에 소숫점 부분이 0 이라면 1을 출력, 아니면 0을 출력하는 방식을 썼습니다.
반례나 아이디어에서 잘못된 부분을 찾아주시면 감사하겠습니다.
46%쯤에서 틀렸습니다가 나오네요.
미리 감사합니다.