| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- jpa
- 코드 테스트
- 미니정리
- web
- jsp
- 데이터베이스
- 정리
- BACK-END
- JavaScript
- SQL
- 디자인 패턴
- java
- 알고리즘
- 백엔드
- oracle
- 오라클
- 프런트엔드
- 프론트엔드
- spring
- 프로그래머스
- 쿼리
- node.js
- Next.js
- 자바스크립트
- 서버
- 스프링
- MySQL
- 스프링부트
- 자바
- 코드테스트
- Today
- Total
참치코더의 꿈 메모장
알고리즘 93일차 - 프로그래머스 기출 문제(JAVA) / 기사단원의 무기 본문

- 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
'잡다한 웹지식' 카테고리의 다른 글
| 알고리즘 96일차 - 프로그래머스 기출 문제(JAVA) / 배열 두배 만들기 (0) | 2025.08.23 |
|---|---|
| 알고리즘 95일차 - 프로그래머스 기출 문제(JAVA) / 카펫 (2) | 2025.08.22 |
| 알고리즘 92일차 - 프로그래머스 기출 문제(JAVA) / 소수 만들기 (2) | 2025.08.14 |
| 알고리즘 91일차 - 프로그래머스 기출 문제(JAVA) / 추억 점수 (1) | 2025.08.13 |
| 알고리즘 90일차 - 프로그래머스 기출 문제(JAVA) / 2016년 (3) | 2025.08.11 |