작성
·
285
3
안녕하세요 선생님. 거리를 1000으로 두는 이유가 궁금합니다. 거리 값을 1000으로 두어도 타겟 문자를 만나면 0으로 초기화 되는데 왜 0이 아닌 큰 값으로 설정을 하신건가요.
답변 2
3
안녕하세요^^
입력된 문자열이 ADBCDEFD 이고 타겟문자가 D라 할 때
각 문자가 왼쪽에 있는 타겟문자로 부터 거리를 구할 때 첫 번째 문자 A는 왼쪽에 D가 없기때문에 거리를 큰 숫자로 해놓습니다.
그 다음 오른쪽에 있는 타겟문자로 부터 거리를 구하면 첫 번째 문자 A는 거리가 1입니다.
왼쪽의 거리와 오른쪽의 거리 중 작은 값을 A의 거리로 하기 때문에 거리는 1이 선택됩니다.
A문자처럼 왼쪽이나 오른쪽에 타겟문자가 없을 경우 거리를 큰 숫자로 해야 반대방향의 거리가 작은 값이 되어 선택되게 됩니다. 그래서 p=1000으로 넉넉하게 잡습니다. 입력되는 문자열의 길이가 100을 넘지 않기 때문에 1000이면 넉넉하게 큽니다.
p=0 을 둬도 작동되는것은 단지 저 예제에서 첫번째 e전에 문자가 하나 밖에 없어서 작동되는것이고
만약. vvvtvt 이런 문자열의 t와의 거리를 구하는거라면
p=0이라면 첫 answer에 [1,2,3,0,1,0]가 담겨버리는데,
그렇게 된다면 뒤에서부터 탐색할때 생성되는 배열인 [3,2,1,0,1,0 ] 라는 배열과 비교하면서
첫 v와 가장 가까운 t의 거리는 3임에도 불구하고 1이 담겨버립니다.
하지만, p를 문자열길이보다 큰 값으로 두게되면 ex)1000
첫 answer 배열에 [1001,2,3,0,1,0]이 담기면서 정상적으로 작동합니다.
아마 직접 예제를 ttteachermode 이런식으로 바꿔서 해보시면 이해가실꺼같습니다. 저도 이해하느라 오래걸렸어요 ㅠ
1
안녕하세요! 저는 이 부분이 계속 이해가 잘 안가서요 ㅠㅠ
P=0 으로 두어도
ADBCDEFD D 인 경우
A가 대상값이 아니기 때문에 1로 처음부터 들어가고 반대방향으로 올 때도 D 다음으로 와서 다시 1 이 되면 작지 않아서 값이 변경되진 않지만 기존 1도 맞는 값이라서
맞는게 아닌가요?
ADBCDEFD D 에서
P=0 으로 두면 1 0 1 1 0 1 1 0 가 나오는데 답이 아닌가요?