TIL231121 D02 슬라이싱 등

jericho·2023년 11월 21일

TIL

목록 보기
2/62

오늘은 동기부여 세션이 있었다.
왜 개발자를 하고자 마음먹었는지, 좋은 개발자가 되려면 무엇이 중요한지, 어떻게 성장해야 할지 등 방향성을 재고해보고, 튜터님의 조언도 들을 수 있는 좋은 시간이었다.

오늘은 배열 슬라이싱에 대해 적어보고자 한다.
슬라이싱을 하려고 보니 파이썬의 lst[:] 슬라이싱 기능이 너무나도 그리웠다. 코틀린은 이렇게 간단한 방법은 없었고, 결론적으로는 copyOfRange 메서드가 유효했다.
먼저 찾은 방법은 slice와 sliceArray 함수였는데, 내부 구조에서 다시 copyOfRange를 호출하는 형태인 것이다. 이를 sliceArray는 그대로 반환하고, slice는 리스트로 변환하여 반환한다. 그러니 처음부터 copyOfRange를 사용하는 것이 좋겠다. 주의할 점은 copyOfRange는 start until end 이고, slice 쪽은 start..end 라는 것. 게다가 slice 쪽은 인덱스를 인자로 받는 것이 아니라 range를 인자로 받기 때문에 더욱 비효율적인 것 같다.
(위는 배열에 대한 얘기인데, 리스트의 경우에는 어떤 동작을 보일 지 모르겠다. 확인해볼 필요가 있다.)
list는 subList 메서드를 활용할 수 있을 것으로 보인다. (직접 사용해보지 않았다.) subList는 동일한 메모리공간에서 일부를 보여주는 형태이고, slice는 새 리스트를 반환하는 형태라고 한다. 그런데 subList에서 변경한다고 원본 리스트에 영향이 있지 않다고 하는데... 같은 메모리 공간을 참조한다면 이것이 가능한 것인지 의문이다. 나중에 subList를 사용할 일이 생기면 확인해봐야겠다.
(231122 추가)
String에서는 slice가 substring을 호출한다. slice가 일반화된? 메서드인 것 같다.

참고로 배열을 출력하면 주소값만 덜렁 내놓는다. 이를 출력하려면 직접 for문 돌려 출력하거나, forEach로 print(it)을 활용할 수 있는데, 출력이 느린 동작임을 감안하면 비효율.
arr.contentToString() 라는 좋은 메서드가 있었다. [1, 2, 3] 형태로 만들어준다.
arr.joinToString(", ") 도 활용할 수 있다. 출력 포맷을 원하는 대로 조절할 수 있겠다.

그리고 또 IntelliJ 활용에 대한 것인데, (안스를 써야 하건만 고장 이슈때문에...) 기본으로 생성되는 src/main/kotlin 폴더에 Solution 클래스를 여러 개 만들면 재정의 에러가 발생한다. 그렇다고 매 문제 풀 때마다 새로 프로젝트를 열 수도 없고. save 폴더를 따로 만들어 푼 문제를 옮겨두면 인식?하지 않는 것 같다.

끝.

0개의 댓글