인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

김상운님의 프로필 이미지
김상운

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

10. 문자거리

거리를 0

작성

·

286

3

안녕하세요 선생님. 거리를 1000으로 두는 이유가 궁금합니다. 거리 값을 1000으로 두어도 타겟 문자를 만나면 0으로 초기화 되는데 왜 0이 아닌 큰 값으로 설정을 하신건가요.

답변 2

3

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

입력된 문자열이 ADBCDEFD 이고 타겟문자가 D라 할 때

각 문자가 왼쪽에 있는 타겟문자로 부터 거리를 구할 때 첫 번째 문자 A는 왼쪽에 D가 없기때문에 거리를 큰 숫자로 해놓습니다.

그 다음 오른쪽에 있는 타겟문자로 부터 거리를 구하면 첫 번째 문자 A는 거리가 1입니다. 

왼쪽의 거리와 오른쪽의 거리 중 작은 값을 A의 거리로 하기 때문에 거리는 1이 선택됩니다.

A문자처럼 왼쪽이나 오른쪽에 타겟문자가 없을 경우 거리를 큰 숫자로 해야 반대방향의 거리가 작은 값이 되어 선택되게 됩니다. 그래서 p=1000으로 넉넉하게 잡습니다. 입력되는 문자열의 길이가 100을 넘지 않기 때문에 1000이면 넉넉하게 큽니다.

안녕하세요! 저는 이 부분이 계속 이해가 잘 안가서요 ㅠㅠ

P=0 으로 두어도
ADBCDEFD D 인 경우

A가 대상값이 아니기 때문에 1로 처음부터 들어가고 반대방향으로 올 때도 D 다음으로 와서 다시 1 이 되면 작지 않아서 값이 변경되진 않지만 기존 1도 맞는 값이라서 
맞는게 아닌가요?

ADBCDEFD D 에서 

P=0 으로 두면 1 0 1 1 0 1 1 0  가 나오는데 답이 아닌가요?

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

김상운님의 프로필 이미지
김상운
질문자

초기 거리를 -1 로 생각을 해보니 이제야 이해가 갑니다. 감사합니다.

김상운님의 프로필 이미지
김상운

작성한 질문수

질문하기