(가장빠른입출력방법)알고리즘 문제풀다가 다른분께서 올려놓은코드 이해를 못하겠습니다.
inline static int read() {
if (!(idx - bytes)) {
bytes = fread(buf, sizeof(char), sizeof(buf), stdin);
idx = 0;
}
return buf[idx++];
}
inline static int parse() {
int ret = 0,
num = read();
while (num - 0x0A && num - 0x20) {
ret = ret*10 + (num & 0x0F);
num = read();
}
return ret;
}
https://www.acmicpc.net/source/3904066
에 있는 코드이고요
다른 빠른 분들도 저렇게 비슷하게 입출력을 받으시던데
코드분석이 잘 안됩니다.
ret = ret*10 + (num & 0x0F); 은 11을 입력했다고 치면 문자열 11을 숫자 11로 만들어주는 역할같은데
어떻게 이렇게 되는지 잘 모르겠습니다. 그리고 이렇게 입력을 받고, 제가 gcc로 컴파일해서 출력해보면 아무것도 나오지않는데, 백준가서 제출하면 통과가 되더군요;;
고수님들 제발 어떻게 저렇게 동작하는지 알려주시면 정말 감사하겠습니다. ㅜㅜ
p.s 그리고 왜 cin 과 scanf 그리고 fread의 속도가 차이가 이렇게 많이나는지 궁금합니다.
cin의 경우는 stdio를 sync해줘서 느리다고 하는데 이 말이 잘 이해가 가지않습니다.
404
저 주소로 들어가보니까 404 ??????????? 만 뜨는데 저만 그런가요?
저도 저 링크는 404가 뜨는군요. 아마 문제를 푼
저도 저 링크는 404가 뜨는군요. 아마 문제를 푼 사람에게만 보이나 싶은데,
다른 건 몰라도 문자열 "11"을 숫자 11로 만들어주는 코드야 아스키코드를 보시면
'0'부터 '9'까지의 아스키코드가 0x30~0x39 니까 0x0F와 AND연산 하면 앞의 3은 날아가고 뒤의 0~9만 남죠.
다음 글자를 읽을 때 현재까지의 결과에 10을 곱해서 자릿수를 올려주는 거고요.
좋은 하루 되세요!
링크 들어가 보니 로그인 화면이 뜨네요.
링크 들어가 보니 로그인 화면이 뜨네요.
KLDP에서 소스 코드 올릴 때는 code 태그 쓰세요.
https://kldp.org/node/158191
세벌 https://sebuls.blogspot.kr/
댓글 달기