참치코더의 꿈 메모장

알고리즘 93일차 - 프로그래머스 기출 문제(JAVA) / 기사단원의 무기 본문

잡다한 웹지식

알고리즘 93일차 - 프로그래머스 기출 문제(JAVA) / 기사단원의 무기

참치깡 2025. 8. 15. 18:17
728x90

 

 

- number에 해당하는 숫자의 각각 약수를 받아 만약 약수 값이 limit 값보다 크면 해당 값을 power 값으로 바꾼후 전체 약수의 

  값을 구하는 문제이다.

 

- 2~3번 시도했으나 런타임 초과로 문제를 틀렸는데 실행시간이 문제였다. 처음 stream 사용안하고 기본 for문으로

 만들었는데 런타임 실패... stream으로 만들었는데도 실패를 하게되었다. 결국 문제는 알고리즘 자체 실행시간이 느려 

런타임 오류가 난것이었다. 이 문제는 제곱근을 이용한 수학공식을 사용해야 하는 문제이다.

 

- IntStream.rangeClosed(1, number)을 사용하면 1부터 number 까지의 수를 for문 처럼 받을 수 있다. 해당 하는 값을

  map으로 조건을 준 후 안에서 for문을 돌려 해당하는 수를 제곱근으로 나눠 만약 j * j 가 i 랑 다르다면 2개 같다면 1개를

 출력하도록 하면 해당하는 값을 빠르게 구할 수 있다.

 

- 그 이후 1개의 숫자를 계산 할때마다 limit 값보다 크다면 power의 무기를 받아 대입해주고 아니라면 그대로 숫자를 대입해주는 

  방법으로 값을 대입해 준다음에 마지막으로 sum()을 해준다면 정답을 얻을 수 있다. ^^

 

ex) 12라면 

 

- 1 -> 12/1 = 12

- 2 -> 12/2 = 6

- 3 -> 12/ 3 = 4

(약수는 1,12,2,6,3,4 -> 1~3만 계산해도 모든 약수를 찾을 수 있음 O(n) / 2의 효율을 낼 수 있다.)

 

https://school.programmers.co.kr/questions/90059

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

728x90
Comments