250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 완전탐색
- 코테
- dfs
- 코딩테스트
- SQL
- sw expert academy
- swexpertacademy
- BFS
- sw expert
- englishbook
- MySQL
- 알고리즘
- 쉬운 알고리즘 문제
- the midnight library
- English
- 프로그래머스
- 삼성
- 백준
- STUDYENGLISH
- 원서
- nightroutine
- 원서읽기
- 알고리즘 문제
- PyQt
- 원서읽자
- 직무면접
- 코테 준비
- D4
- readingbook
- 코테 대비
Archives
- Today
- Total
시나브로
8567. 약수의 개수가 많은 수 본문
728x90
이 문제에 오버타임에 대한 댓글이 있어서 데이터량이 큰 것을 알았다. 또한. 이 문제의 경우에는 테스트 케이스 수에 대한 정보도 없어서 테스트 케이스가 얼마나 많이 들어올지도 모른다는 것이다.
그래서 첫 번째로 생각한 솔류션은
list 배열에 각 인덱스에 대응하는 약수 개수를 저장해놓고 처음부터 각 값까지 max값을 계산해였다.
하지만, 이 경우, 문제 자체의 개수도 많았기에 5개뿐이 맞추지 못했다.
그래서 새로운 솔류션을 생각했다.
list 배열에 차원을 하나 더 늘려 그 숫자까지의 max 값을 저장하는 것이었다.
그렇게 되면 처음 약수의 개수를 찾는 for문과 그 숫자까지의 max 값을 찾는 for문을 이용하여 값을 빠르게 찾을 수 있다.
시간복잡도는 100000(약수 개수 찾기)+100000(max 값 찾기)+N(문제의 개수). 즉, 선형시간에 가능하다
#include<stdio.h>
int list[100001][2] = { 0 };
int main(void) {
freopen("inp.inp", "r", stdin);
freopen("out.out", "w", stdout);
int k = 0;
for (int i = 1; i < 100001; i++) {
k = i;
while (k < 100001)
{
list[k][0]++;
k += i;
}
}
int max = 0;
int max_value = 0;
for (int i = 1; i < 100001; i++) {
if (max_value <= list[i][0]) {
max = i;
max_value = list[i][0];
}
list[i][1] = max;
}
int ts = 0;
scanf("%d", &ts);
int number = 0;
for (int q = 0; q < ts; q++) {
scanf("%d", &number);
printf("#%d %d\n", q + 1, list[number][1]);
}
return 0;
}
728x90
'알고리즘 > SW Expert Academy' 카테고리의 다른 글
[D3] 9280. 진용이네 주차타워 (0) | 2020.03.09 |
---|---|
[D3] 9317. 석찬이의 받아쓰기 (0) | 2020.03.08 |
8568. 3으로 나눈 순열 (0) | 2020.01.07 |
9088. 다이아몬드 (0) | 2020.01.06 |
8993. 하지 추측 (0) | 2020.01.06 |
Comments