티스토리 뷰
반응형
참으로 허탈한 문제. 아무리 생각해도 충분한 시간복잡도에 통과할 수 있는데, 시간초과가 났다. 그래서 개선된 속도로 풀어도 시간초과가 났는데.. 알고보니 입출력 시간 문제였다.
세 번으로 나누어서 풀었다. 처음이 가장 복잡도가 안좋은 방법. 그러더라도 문제를 풀기엔 충분한 스펙이였다. 문제는 입력 시간이였다.
import sys
input = sys.stdin.readline
_n = int(input())
l = [ int(input()) for _ in range(_n) ]
print( round(sum(l)/len(l)) )
sorted = [ f for f in l ]
sorted.sort()
print( sorted[_n//2] )
f = { }
d = 0
for i in l:
s = f.get(i, 0)
f[i] = s + 1
if d < f[i]:
d = f[i]
d = [ i for i, j in f.items() if j == d]
d.sort()
if len(d) > 1:
d = d[1]
else:
d = d[0]
print(d)
print(sorted[_n-1]-sorted[0])
2번째 방법
import sys
input = sys.stdin.readline
# print = sys.stdout.write
_n = int(input())
list = []
for i in range(_n):
d = int(input())
list.append(d)
sorted = [ 0 ] * 8001
for n in list:
sorted[n + 4000 ] += 1
ans = 0
for idx, n in enumerate(sorted):
ans += (idx - 4000) * n
print( round(ans / _n) )
mid = _n // 2 + (1 if _n%2 else 0)
for idx, n in enumerate(sorted):
mid -= n
if mid <= 0 :
print( idx - 4000 )
break
mx = 0
for idx, n in enumerate(sorted):
if mx < n:
mx = n
non = 0
cnt = 2
for idx, n in enumerate(sorted):
if n == mx:
cnt -= 1
non = idx
if cnt == 0:
print( idx - 4000 )
break
if cnt == 1:
print( non - 4000 )
mx = 8000
mn = 0
while mx >= 0:
if sorted[mx] > 0:
break
mx -= 1
while mn <= 8000:
if sorted[mn] > 0:
break
mn += 1
print(mx - mn)
마지막은 c++
#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> v(8001, 0);
for (int i =0; i<n; i++) {
int temp;
cin >> temp;
v[temp+4000] += 1;
}
int sum = 0;
for (int i=0; i<=8000; i++) {
sum += (i - 4000)* v[i];
}
cout << (int)round(double(sum) / n ) << "\n";
int mid = n/2 + (n%2?1:0);
for (int i=0; i<=8000; i++) {
mid -= v[i];
if (mid <=0){
cout << (i - 4000) <<"\n";
break;
}
}
int d = 0;
for (int i=0; i<=8000; i++) {
if (d < v[i]) {
d = v[i];
}
}
int non = 0;
int cnt = 2;
for (int i=0; i<=8000; i++) {
if (d == v[i]) {
non = i - 4000;
cnt--;
if (cnt == 0) {
cout << i - 4000 << "\n";
break;
}
}
}
if (cnt == 1) {
cout << non << "\n";
}
int mx = 8000;
int mn = 0;
while (mx >= 0){
if(v[mx]>0) break;
mx--;
}
while (mn <= 8000) {
if (v[mn]>0) break;
mn++;
}
cout << mx - mn <<"\n";
}
반응형
'알고리즘 문제 > implementation' 카테고리의 다른 글
leetcode. 3 Longest Substring Without Repeating Characters (0) | 2022.09.06 |
---|---|
leetcode. 2 Add Two Numbers (0) | 2022.09.05 |
백준 2037 문자메세지 (0) | 2019.09.17 |
CF 1092 C Prefixes and Suffixes (0) | 2018.12.19 |
908B New Year and Buggy Bot (0) | 2017.12.30 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 대규모 시스템 설계 기초
- 이산수학
- grafana cloud
- 명제논리
- beginning javascript
- 데이터 중심 애플리케이션 설계
- 로젠
- 자바스크립트
- 그라파나
- flutter
- arena simulation
- 아레나
- paul wilton
- Arena
- Discrete Mathematics
- 최단경로 알고리즘
- 시뮬레이션
- 엄청난 인내심과 시뮬레이션을 위한 아레나 툴
- Propositional and Predicate Logic
- Grafana
- Simulation
- 항해99
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 이산 수학
- rosen
- 아레나시뮬레이션
- 백준
- 자바스크립트 예제
- javascript
- 아레나 시뮬레이션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함