상세 컨텐츠

본문 제목

백준 1012: 유기농 배추 (Swift) - feat. inout & call by reference

카테고리 없음

by 앱등개발자IOS 2022. 5. 24. 20:04

본문

이제 알고리즘 별 기본 문제들을 Swift로 한 문제씩 풀고난 후, 랜덤하게 문제들을 풀이하게 되었고, 그 첫 관문을 1012번 유기농배추가 열어주었다.

 

간단한 BFS문제로 알았으나, Python에 익숙한 나머지 Array를 call by reference로 함수에 전달하는 것을 당연하게 생각하고 작성했으나, 런타임 에러가 뜨고 말았다.

매개변수로 전달한 Array를 함수 내부에서 변경을 했더니, 해당 줄에 오류가 뜨며 "let constant이므로 변경할 수 없다"라는 문구가 떴다..

 

몇개월 전에 풀이했던 코드가 있어 확인해보니, inout이라는 키워드가 다시금 생각났다.

 

Swift에서는 call by value가 기본이고,  call by reference로 함수의 매개변수에 Array를 전달하려면 call( &arr)과 같이

'&'키워드를 사용하여 주솟값을 전달,

함수 구현부에서는 자료형 앞에 inout으로  주소값이라고 표시를 해준다.

이는 해당 변수가 변경될 수 있고, 함수가 호출 종료된 뒤에서 변경된 상태를 유지하겠다는 sign이다.

 

이외에는 기본 BFS풀이대로 상,하,좌,우 체크하며 count를 하는 알고리즘대로 진행하였다.