728x90
- 1.의도 및 이유: 원형 수형을 구성하고, 원형 수열의 연속 부분 수열 합으로 만들 수 있는 수의 개수를 구하는 문제 , 주어진배열 elements를 원형으로 배치하면서 길이가 1인 연속 부분 수열을 모두 고려하고, 중복을 제외한 합의 개수를 계산한다. 코드에서는 원형 수열의 특성을 활용하여 타이아웃을 피하고자 함.
- 2.코드 동작 로직: 원형 수열에서 중복을 제외한 모든 연속 부분 수열의 합의 개수를 반환함. 중복을 피하기 위해 set을 사용했다. 원형 수열의 특성에따라 길이가 1인 연속 부분 수열을 모두 고려한다. startIdx와 endIdx를 결정해서 부분 수열을 생성하고, 합을 계산한 후 set에 추가한다. endIdx가 배열 길이를 벗어날 경우를 고려하여 원형 수열에서 다시 시작할 수 있도록 %elements.size를 사용한다. 최종적으로 set의 크기가 중복을 제외한 합의 갯수가 된다.
- 3. 버그 또는 에러 및 해결:초기에는 빈 리스트에 합을 더해가는 방식으로 접근해서 무한 반복문이 발생하고 시간 초과 문제가 발생했다. 이 문제를 해결하기위해 startIdx와 endIdx를 설정하여 특정 부분 수열을 추출하고 합을 계산하여 중복을 피하도록 변경함 . 또한, endIdx가 배열 길이를 벗어날 경우를 고려하여 원형 수열에서 다시 시작할 수 있도록 %element.size를 이용함. 결과적으로 무한 반복문과 타임아웃 문제를 피하고, 효과적으로 해결할 수 있었음.
해당 문제를 풀때, 먼저 elements가 원형으로 배치되면 시작점이 어느군데인지에 따라 시작점이 달라졌다.
또한 원에서 시계방향 혹은 시계반대방향 두군데 모두 동일하게 길이별로 합의 결과가 중복되기에
배열의 인덱스 방향으로 고려를 해도 된다고 생각했다.
하지만 위와 같은 방법대로 코드를 작성한결과 에러가 계속났고 방식을 바꾸기로 결정했다.
먼저 startIdx와 endIdx를 설정하기로 마음 먹었다. 그리고 인덱스가 벗어나는 부분은 %elements.size을 이용했다.
코드는 다음과 같이 작성했다.
성공적으로 나왔다.
- keep: 이상하다 싶으면 방식 바로 바꾸기
- problem: 아는 문법만 계속 쓰는 경향이 있어서 더 찾아보고 해결하기
- try: 코드 최적화
728x90
'TIL > kotlin 알고리즘' 카테고리의 다른 글
kotlin 프로그래머스 lv2 n^2 배열 자르기 (0) | 2024.03.11 |
---|---|
kotlin 프로그래머스 lv2 H-Index (0) | 2024.03.07 |
kotlin 프로그래머스 lv2 괄호 회전하기 (1) | 2024.03.06 |
kotlin 프로그래머스 lv2 귤 고르기 (0) | 2024.03.05 |
kotlin 프로그래머스 lv2 멀리 뛰기 (0) | 2024.03.05 |