TIL/kotlin 알고리즘

kotlin 프로그래머스 lv1 기사단원의 무기

crablo 2024. 2. 13. 15:04
728x90

 

맨처음 문제를 보자마자 

1..number까지 약수를 담는 새로운 리스트를 만들었다.

 

처음에는 위와 같이 작성했으나 오류가 났다.

원인은 시간초과였다.

그래서 코드의 양을 줄이기로 결심했다.

위와 동일하게 약수를 담는 배열을 초기화하고 크기는 number+1만큼 지정했다.

코드는 아래와 같다.

2중 for문을 사용하지 않고 문제를 풀었더니 계속 에러가나서

그냥 원래 풀던데로 풀었다.

i는 그대로 1~number까지의 수이고

풀이는 아래와 같이 정리했다.

 

1.divisors 배열은 1부터 number 까지의 숫자에 대한 약수 개수를 저장하는 배열이다.

배열의 각 인덱스는 기사 번호에 해당하고, 배열의 값은 해당 기사 번호의 약수 갯수이다.

 

2. 바깥쪽 for루프는 1부터 number 까지의 기사 번호를 반복한다.

안쪽의 for루프는 현재 기사 번호i의 약수를 찾는다. i 부터 시작해서 i 간격으로 증가하면서, 현재 기사 번호의 배수에 해당하는 숫자들을 모두 찾아서 divisors 배열에서 해당 인덱스의 값을 1씩 증가시킨다.

 

3. 최종적으로 divisors 배열의 각 값에 대해, 만약 약수 개수가 제한수치(limit)를 초과하면 지정된 공격력(power)으로 바꾸고, 그렇지 않으면 원래의 약수 개수로 둔다.

 

 4. 마지막으로 divisors 배열의 합을 구하여 반환한다.

생각보다 오랜만에 쉬고와서 그런지 문제를 푸는데 오랜시간이 걸리진 않았다.

하지만 아직도 고차함수 풀이에 낯선 경향이 있어서 자꾸 사용해봐야겠다.

 

 

728x90