인프런 커뮤니티 질문&답변

김태현님의 프로필 이미지
김태현

작성한 질문수

Do it! 알고리즘 코딩테스트 with C++

알고리즘 코딩테스트 문제풀이 강의 - 9 DNA 비밀번호 (백준 12891)

해결된 질문

작성

·

484

1

안녕하세요. C++ 강의를 보고 있는데 궁금한게 있어서 질문 드립니다. Add 함수에 myArr[0]++; 와 Remove 함수에 myArr[0]--; 이해가 안갑니다.

그리고 슬라이딩 윈도우 처리부분에 int j = i - P; 이 부분에 대해서 자세히 설명 부탁드립니다. i,P랑 같은 값인데 빼면 0이고 그 다음은 i 값이 증가해서 음수가 되는데 어떻게 처리가 되는 부분인지 이해가 안갑니다.

답변 1

0

하루코딩님의 프로필 이미지
하루코딩
지식공유자

안녕하세요. 유튜브에 댓글을 달아 놓았는데 혹시 못 보셨을 수도 있을 것 같아 댓글 내용으로 답변을 대신합니다. ^^ 즐거운 하루 되세요 :)

해당 문제에서 DNS 문자열은 A C G T 라고 하였습니다. 여기에서 myArr[0]은 A의 개수가 현재 부분문자열에서 몇개인지 저장하는 곳입니다. 때문에 myArr[0]++은 현재 부분문자열에 A라는 값이 1개 더 추가되었으니 myArr[0]의 값을 1 증가시키세요 라는 뜻입니다. 반대로 myArr[0]--는 현재 부분문자열에 A라는 값이 1개 빠졌으니 myArr[0]의 값을 하나 감소 시키세요 라는 뜻입니다. int j= i - P 부분은 최초 i는 for문에서 P이기 때문에 j = 0, i = P가 됩니다. 즉 j는 윈도우가 이동하면서 제거되는 위치, i는 새롭게 들어오는 위치가 되는 것입니다. i값이 증가하게 되면 j의 값은 i - P 이기 때문에 음수가 되는 것이 아니고 1씩 증가하게 됩니다. i = P , j = 0 i = P + 1 , j = 1 i = P + 2, j = 2 이렇게 오른쪽으로 이동하는 느낌이 된다고 생각해주시면 좋을 것 같습니다. 도움이 되셨으면 좋겠습니다. 감사합니다. 즐거운 하루되세요 :)

김태현님의 프로필 이미지
김태현

작성한 질문수

질문하기