아래와 같은 코드에서 ( https://koosaga.com/157 에 있는 코드에서 트라이 구하는 부분입니당)
auto &i:v 에서 i가 string이 되고
auto &j:i에서 j가 char이 되므로
trie[p][j]에서 j가 아스키 26은 가뿐히 넘어갈 텐데 어떻게 동작하는 건지 궁금합니다.
포인터의 세계 너모 알쏭달쏭하네요ㅎ...
이해하신게 맞고 코드 작성자 분이 간단하게 작성하다 아무래도 실수하신 것 같습니다.
아스키문자 26 이하로 이루어진 문자열인가봅니다 ㅋㅋ
놀랍게도 예제 넣어보면 매우 잘 작동합니다...!
글의 코드는 제가 대강 궁금한 부분만 간추린 거라 다른 중요한 부분을 생략햇을 수도 있는데
원본 코드 링크 아래와 같습니당! ‘ㅁ’
코드 원본 ::
https://gist.github.com/koosag...
메모리가 연속적이라서 우연히 작동하는거 아닐까요? 제한에 가까우면 에러날것 같은데.. 워낙 고수분이 짜신거라 제가 모르는 뭔가가 있을 수도 있을것 같네요
어차피 모든 char에 대해 똑같은 범위만큼 shifting된다고 생각하면 될거같아요.
쿼리도 똑같이 날리시는거보니 의도한거같기도합니다.
문법적 측면에서 왜 shifting 되는 걸까요?
적당히 비슷하게 아래와 같은 코드를 작성햇을 경우
각각의 i는 a , s, d , f를 출력하였으며 arr 을 출력하는 과정에서도 Shifting이 일어나지 않아서요 ㅎㅎㅎㅎㅁㅎㅎㅎㅎㅎㅎㅎㅎ(멘붕
그냥 2차원 배열이 연속적이라, 1차원에서 넘어선 주소는 2차원에서의 다음 인덱스의 주소와 같기 때문에 문제가 발생하지 않는 것입니다.
의도한게 맞는 것 같네요. 고수들의 생각을 따라잡기 힘들군요..
와 감사합니다 ㅋㅋㅋㅋ MAXN = 100005 인게 그냥 넉넉히 잡은 게 아니고 shift를 고려한 것이었군요 ㄷㄷㄷ
댓글을 작성하려면 로그인해야 합니다.
vl0612 4년 전
아래와 같은 코드에서 ( https://koosaga.com/157 에 있는 코드에서 트라이 구하는 부분입니당)
auto &i:v 에서 i가 string이 되고
auto &j:i에서 j가 char이 되므로
trie[p][j]에서 j가 아스키 26은 가뿐히 넘어갈 텐데 어떻게 동작하는 건지 궁금합니다.
포인터의 세계 너모 알쏭달쏭하네요ㅎ...