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

ghuhan18님의 프로필 이미지
ghuhan18

작성한 질문수

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

정렬 - 선택정렬

질문

작성

·

180

·

수정됨

1

수업들어보니 자바스크립트의 let 이 자바의 int 같은데, 만약 int min = i ; 선언하고 아래 if ( arr[j] < arr[min]) {

min = j ;

}

라고 하셨는데, 그러면 변수 min 에는 j 값이 저장 되기는 하지만 int 는 지역 변수라 if 문 안에서 저장된 int min 의 값이 if 문 밖으로 나가서는 for 문을 실행하여 다시 j 가 하나 더해져서 반복 실행 되었을때 min 의 값은 다시 i 로 초기화 되는건가요? 아니면 j 로 바뀐건가요 ?

 

-제가 아는 지역 변수에 대한 설명입니다

지역 변수는 선언된 함수나 메소드 내에서만 접근이 가능하고, 해당 함수나 메소드의 실행이 끝나면 그 범위를 벗어나서 접근할 수 없습니다.

답변 2

0

ghuhan18님의 프로필 이미지
ghuhan18
질문자

항상 친절하게 설명해주셔서 감사합니다.

 

그럼 즉, 두번째 for 문에서 if 에서 minvalueindex = j 인데, 그게 if 조건문 안에 있는 arr [ minValueIndex] 에 영향을 미친다는 말씀 이신가요?

 

즉 제가 아는 지역변수의 개념은 if 문 {} 안에서만 값이 유효하고 그 밖에서는 유효하지 못한걸로 아는데, 보시면 if 문 안에 minValueIndex 값이 = J 로 되었지만 다시 for 문 반복 실행시 if 를 2번째 실행할때 if 조건문 안의 arr[minValueIndex] 가 왜 기존 int minValueIndex = i ; 가 되는게 아니라 j 로 그대로 있는건지 이해가 안갑니다.

이게 왜 영향을 미치는지 잘 이해가 안갑니다.

 

혹여나 안에 있는 inner loop 들이 가장 밖에 있는 for loop 과 연관이 있기 때문에 그 for 문까지는 영향을 끼치는 건가요?

감자님의 프로필 이미지
감자
지식공유자

지역변수의 개념은 선언과 소멸로 바라보시면 될 것 같습니다.
let minValueIndex가 첫 번째 for문 안에 선언되어 있기 때문에 해당 for문을 다시 반복하기 전까지는 계속 살아있습니다.
즉 inner for문이 동작하는 동안에는 지역변수는 계속 살아있습니다.
따라서 j로 값을 덮어쓰면 계속 유지됩니다.
다른 언어에서 같은 코드를 작성하더라도 똑같습니다.
중첩 for문으로 테스트 해보시길 바랍니다

0

감자님의 프로필 이미지
감자
지식공유자

min은 SelectionSort함수 내 첫 번째 for문 안에 선언되어 있으므로 첫 번째 for문안에서 유효합니다.
따라서 두 번째 for문에서 값을 수정했더라도 첫 번째 for문 안의 값은 그대로 유지됩니다.
다만 첫 번째 포문의 다음 인덱스때는 i값으로 초기화해주기 때문에 i값으로 변하겠죠?

ghuhan18님의 프로필 이미지
ghuhan18
질문자

항상 친절하게 설명해주셔서 감사합니다.

 

그럼 즉, 두번째 for 문에서 if 에서 minvalueindex = j 인데, 그게 if 조건문 안에 있는 arr [ minValueIndex] 에 영향을 미친다는 말씀 이신가요?

 

즉 제가 아는 지역변수의 개념은 if 문 {} 안에서만 값이 유효하고 그 밖에서는 유효하지 못한걸로 아는데, 보시면 if 문 안에 minValueIndex 값이 = J 로 되었지만 다시 for 문 반복 실행시 if 를 2번째 실행할때 if 조건문 안의 arr[minValueIndex] 가 왜 기존 int minValueIndex = i ; 가 되는게 아니라 j 로 그대로 있는건지 이해가 안갑니다.

이게 왜 영향을 미치는지 잘 이해가 안갑니다.

 

혹여나 안에 있는 inner loop 들이 가장 밖에 있는 for loop 과 연관이 있기 때문에 그 for 문까지는 영향을 끼치는 건가요?

ghuhan18님의 프로필 이미지
ghuhan18

작성한 질문수

질문하기