1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include<cstdio> #include<algorithm> int arr[100002]; using namespace std; int main(void) { int n; scanf("%d", &n); for (int i=1; i<=n; i++) scanf("%d", &arr[i]); sort(arr+1,arr+n+1); for (int i=1; i<=n; i++) if(arr[i-1]!=arr[i]) printf("%d ", arr[i]); return 0; } | cs |
내가 처음에 제 출한 코드는 이건데 메모리랑 시간이 많이 나가길래 나보다 적게 나가는 분들꺼 참고해서 코드를 바꿔봤다.
일단 첫 번째로 절대값이 1000이하인 정수만 들어온다. 100,000까지 선언할 필요가 없었음.ㅠㅠ
그냥 수의 개수가 십만이길래 아무 생각없이 배열 크기도 십만으로 잡았는데 이런 것도 주의해야겠구나 라고 생각했다.
아무튼, 나처럼 이전 배열의 값이랑 비교해서 출력하는 코드가 아닌 분들은 대체로 배열의 크기는 들어올 수 있는 수의 범위인 2000만큼 (bool로 잡는 분들도 계심) 잡고, 수가 들어오면 그 수의+1000(절대값)해서 값 증가시키기 (bool이면 1). 그리고 배열의 값들이 0보다 큰 것들만 출력시키면 된다.
왜냐하면, 2가 3번 들어와도 arr[2+1000], 즉, arr[1002]번째 값만 증가하기 때문에 따로 처리를 해줄 필요가 없기 때문이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include<cstdio> int arr[2002]; int main(void) { int n,t; scanf("%d", &n); for (int i=0; i<n; i++){ scanf("%d", &t); arr[t+1000]++; } for (int i=0; i<2001; i++) if(arr[i]>0) printf("%d ", i-1000); return 0; } | cs |
'백준 1 > 수학' 카테고리의 다른 글
| [백준 4948] 베르트랑 공준 (0) | 2020.12.05 |
|---|---|
| [백준 1929] 소수 구하기 (0) | 2020.12.05 |
| [백준 11004] k번째 수 (0) | 2020.12.05 |
| [백준 1065] 한수 (0) | 2020.12.05 |
| [백준 11816] 8진수, 10진수, 16진수 (0) | 2020.12.05 |