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 | 31 |
Tags
- 그리디
- dfs
- Kotlin
- 시뮬레이션
- 플로이드-와샬
- 완전탐색
- 위상정렬
- 프로그래머스
- CS
- 후니의 쉽게 쓴 시스코 네트워킹
- 구현
- swea
- 세그먼트 트리
- JUnit 5
- 이분탐색
- 동적계획법
- 에라토스테네스의 체
- 알고리즘
- 스택
- 투 포인터
- 백트래킹
- Network
- java
- 유니온 파인드
- 수학
- 문자열
- mst
- 백준
- BFS
- Effective Java
Archives
반갑습니다!
[백준] 2012 등수매기기 본문
풀이
문제의 관건은 각 학생들이 본인이 희망하는 등수와 실제 등수의 차이가 적어야한다는 점이다. 아이러니하지만 5등을 희망하는 선수가 1등을 하면 불만도 4가 쌓인다. 5등을 희망하는 학생은 4등이나 5등, 6등 등을 받는 것이 훨씬 좋다는 얘기이다. 따라서 희망 등수를 오름차순으로 정렬한 뒤, 1등부터 차례로 순위를 부여해주면 된다.
코드
C++
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
vector<int> s;
cin >> n;
for (int i = 0; i < n; i++) {
int tmp;
cin >> tmp;
s.push_back(tmp);
}
sort(tmp.begin(), tmp.end());
long long answer = 0;
for (int i = 0; i < n; i++) {
answer += (long long)abs(s[i] - (i + 1));
}
cout << answer << '\n';
return 0;
}
Python3
import sys
n = int(sys.stdin.readline().rstrip())
s = []
for _ in range(n):
s.append(int(sys.stdin.readline().rstrip()))
s.sort()
answer = 0
for i in range(n):
answer += abs(s[i] - (i + 1))
print(answer)
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 1822 차집합 (0) | 2020.09.23 |
---|---|
[백준] 1715 카드 정렬하기 (0) | 2020.09.23 |
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2020.09.22 |
[프로그래머스] 삼각 달팽이 (0) | 2020.09.22 |
[백준] 18428 감시 피하기 (0) | 2020.09.22 |