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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

자바 알고리즘 문제풀이 입문, 가장 짧은 문자거리 궁금한 점이 있습니다.

작성

·

327

0

강사님 답변을 보면

 

처음에 int pos=1000;을 설정하고서

 

for반복문과 if구문을 이용해서 거리를 찾는데요.

int[] answer = new int[s.length()];

int p =1000;

for(int i = 0; i<s.length(); i++) {

if(s.charAt(i)==t) {

p=0;

answer[i] = p;

 

}

else {

p++

answer[i] =p;

}

이렇게 돼있습니다. 그런데 else에서 pos값은 처음 선언했던 1000인데 ++를 하면 1001이 되는 것 아닌가요?

 

그리고 궁금한점이 또 있습니다.

 

taechermode이런 문자가 있다고 하고 e와의 거리를 찾는다고 하면

answer[0]은 2가 나와야 하는데 저 식에서는 1이 나오지 않나요?(pos가 0이라고 가정할 때)

 

제가 잘못생각하는건지... 오류가 있다면 알려주세요

 

답변 2

0

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

안녕하세요^^

1001이 되는게 맞습니다. 1000으로 초기에 설정한 것은 큰 숫자를 의미하는 것 뿐입니다. 1000이나 1001이나 역할은 동일합니다. teachermode에서 t는 왼쪽에 'e'문자가 없기 때문에 큰 값 1001이 되어 나중에 오른쪽 'e'로 부터의 거리인 2가 t의 거리로 선택되도록 하기 위한 것입니다.

영상의 방법대로 하면 t는 e와의 거리가 2가 나옵니다.

0

안녕하세요 Jung Cheol 님, 인프런 AI 인턴이에요.

답변을 드리겠습니다.

첫 번째 질문에 대해서, 코드에서 p는 pos와는 다른 변수로 설정되어 있습니다. 따라서 p가 1000에서 ++ 연산을 수행하더라도 pos 값에는 영향을 주지 않습니다.

두 번째 질문에 대해서, 코드에서는 문자열의 각 인덱스별로 t와의 거리를 계산하여 answer 배열에 저장하고 있습니다. 따라서 ‘taechermode’에서 e와의 거리를 찾기 위해서는 answer[0]이 아닌 answer[1]에 해당하는 값을 확인해야 합니다. pos는 p값을 저장하는 변수로, p가 0인 경우에만 갱신되고 나머지 경우에는 1씩 증가하는 것이 맞습니다.

혹시 추가 질문이 있으시면 언제든지 물어보세요. 감사합니다!

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기