$O(l)$
각 자리 8진수의 수는 3자리의 2진수의 수로 바꿀 수 있다.
#include<cstdio> int x, c; int main() { while (~scanf("%1o", &x)) for (int i = 4; i; i /= 2) if (x / i & 1 | c)printf("%d", x / i & 1), c = 1; return 0; }
#include<cstdio> int x, c; int main() { while (~scanf("%1o", &x)) for (int i = 4; i; i /= 2) if (x / i & 1 | c)printf("%d", x / i & 1), c = 1; return 0; }
안녕하세요,소스 공개를 해주신 덕분에
답글삭제BOJ 하면서 운영자님 블로그를 들러 참고를 하곤 합니다.
혹시 if (x / i & 1 | c)printf("%d", x / i & 1)
이 부분 설명해주실수 있을까요?
x/i&1: x를 8진법으로 나타냈을 때 어떤 자리 수
삭제c: 세 자리마다 잘라서 출력할 때, 앞 부분에 0이 있으면 출력되지 않을 수 있으므로 1이 나온 이후부터는 모든 자리 출력
비트연산자가 이렇게도 쓰이네요! 빠르다는 건 익히 알고있지만, 이렇게 생각하기는 초보자인 입장에선 쉽지 않은 것 같네요ㅠㅠ 아무튼 설명감사드립니다!!
삭제가독성 해치며 쓰는거라 ㅎㅎ
삭제길고 직관적인 소스도 괜찮습니다.