shwan   2년 전

boolean부분부터 이해가 잘 안갑니다 ㅠㅠ

dinky24   2년 전

@shwan

먼저, 19번의 반복문(for문)은 모든 입력된 문자열의 길이가 같기 때문에 (즉, 모든 arr[번호]의 문자열 길이가 같습니다)
arr[0]번 문자열의 길이를 기준으로 모든 문자를 0부터 arr[0].size() 까지 하나씩 검사하기 위한 반복문입니다.

20번의 dif = false는 지금 탐색하는 문자, i == 0 이라면 첫번째 문자(arr[모든 번호][i])가 모두 같다고 가정합니다.
그리고 21번부터 문자열을 서로 비교하면서 i 자리의 문자가 서로 다른지 확인합니다. 
만약 다르다면 dif가 true가 되고 i 자리의 문자가 다른 문자열(arr)이 존재한다는 뜻이 됩니다.

따라서 27번에서
dif가 true면 i 자리의 문자는 확실하지 않으므로 ?가 출력되도록 하고,
dif가 false면 i 자리의 문자는 모두 같으므로 arr[0]의 i 번째 자리르 출력합니다. ( 다른 arr[번호]의 i 자리도 같다는 뜻이기 때문입니다. )

이해안가시는 부분 있으면 댓글 달아주시면 답변 드리겠습니다!

shwan   2년 전

@dinky24

답글 감사합니다 

boolean 자체가 for문 안에서 비교 대상도 없이  "20번의 dif = false는 지금 탐색하는 문자, i == 0 이라면 첫번째 문자(arr[모든 번호][i])가 모두 같다고 가정합니다." 이런 의미를 가지는 건가요?? 검색을 해도 관련자료나 강의를 찾기가 쉽지가 않네요 ㅠㅠ

21번부터는 if문을보니 다르면 dif=true를 한다는건 이해가 되는데 for문안에 dif=false 이거만으로 첫번째 문자가 같다고 가정한다는게 이해가 잘 안갑니다 ㅠㅠ

dinky24   2년 전

@shwan

20번 라인의 dif=false 는 그냥 변수를 미리 초기화하는 과정이라고 생각하시면 됩니다.

false로 두는 것은 27번 줄부터 최종적으로 

dif가 true일 때는 "지금 자리 i번째에서 다른 문자열이 있다", 따라서 ?를 출력한다. 가 되어야하고

dif가 false일 때는 "지금 자리 i번째에 모든 문자열이 같다" 이므로 그 자리의 문자를 그대로 출력하는 것입니다.


dif = false 자체가 그런 의미를 가지는 것은 아니지만, 변수를 그런 의미로 사용했다는 뜻에서 이런 설명을 드렸습니다.

정확히는 dif라는 변수를 그런 용도로 사용을 한 것으로 추정되고 dif = false는 기본적으로 모든 문자이 같다고 생각한 상태에서

만약에 다른 문자가 나타나면 (이때, dif = true) 문자열이 같지 않은 부분이 있다고 저장합니다.

20번의 dif = false를 사용하지 않는다면 처음 첫번째(arr[0]) 문자열이 모두 같아도 dif 값이 true를 가졌는지 false를 가졌는지

초기값을 모르기 때문에 ?가 출력될지 문자 그대로 출력될지 보장할 수 없으며,

또한, arr[0] 자리의 결과가 true로 끝났다면 arr[1]의 결과가 모두 같은 문자열을 가지더라도 dif == false의 결과를 얻을 수 없습니다.

즉, 30번줄은 앞 문자에서 true의 결과가 나오면 다신 실행되지 않습니다.


19번의 전체 for문의 로직을 다시 이해해보시면 더욱 도움이 되실 것 같습니다. 직접 예제 입출력을 변수에 넣었다고 생각하고 종이에 적으며 변수 변화를 그려보는 것도

이해하시는데에 큰 도움이 되실 것입니다


아래는 19번 로직을 설명한 것입니다. 꼭 안보셔도 되고 직접 로직을 생각해보시며 이해하시는게 더욱 정확하고 좋습니다.

모든 n개의 문자열은 길이가 같으니 첫번째 문자열의 길이만큼 첫번째 문자부터 마지막 문자까지 하나씩 다른게 있는지 검사합니다.

검사하는 과정은 다음과 같습니다. 현재 i번째의 문자는 모두 같을 것이라고 가정합니다. (dif = false 변수를 이용)

arr[0] ~ arr[j-1] 까지 i번째 문자를 서로 비교합니다. (arr[0]과 arr[1], arr[1]과 arr[2], ... arr[j-2]와 arr[j-1]의 i번째 문자 비교)

만약 비교하는 과정에서 두 문자가 다르면 다른 구간이 존재한다가 됩니다. (dif = true 로 지정)

그리고 다음 문자(i+1)부터 같은 과정을 반복합니다. i번째의 문자는 모두 같을 것이다 -> 검사 -> dif의 상태 확인 후 맞게 출력

위에 밑줄치고 강조한 부분처럼 dif = false가 존재하지 않는다면 정상적으로 이 로직이 실행될 수 없습니다.



댓글을 작성하려면 로그인해야 합니다.