난이도 : D2
문제번호 : 1285
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
아름이를 포함하여 총 N명의 사람이 돌 던지기 게임을 하고 있다. |
입력
첫 번째 줄에 테스트 케이스의 수 T가 주어진다. 각 테스트 케이스의 첫 번째 줄에는 돌을 던지는 사람의 수 N(1≤N≤1,000)이 주어진다. 두 번째 줄에는 각 사람이 돌을 던졌을 때 돌이 떨어진 위치를 나타내는 N개의 정수가 공백으로 구분되어 주어진다. 모든 사람이 돌을 그럭저럭 잘 던졌기 때문에, 돌이 떨어지는 위치는 항상 -100,000에서 100,000사이 범위의 정수이다. (-100,000과 100,000도 돌이 떨어질 수 있다.) |
출력
각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고, 돌이 가장 0에 가깝게 떨어진 곳과 0 사이의 거리 차이와 그렇게 던진 사람이 몇 명인지 나타내는 정수를 공백 하나로 구분하여 출력한다. |
예시
입력 | 출력 |
2 2 -100 100 3 -5 -1 3 |
#1 100 2 #2 1 1 |
2. 문제풀이
0과의 거리비교이기 때문에 절대값을 이용하면 쉽게 풀 수 있습니다. 들어온 거리를 절대값으로 바꾼후에 현재 최소거리와 비교를하여 작은 값으로 바꾸어줍니다. 최소거리를 가진 사람의수도 체크를 해야하기때문에 갱신할때는 count를 1로 바꾸어줍니다. 이후 같은거리가 나오게 된다면 count를 1개씩 증가시킵니다. |
3. 소스코드
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
|
#include <iostream>
#include <algorithm>
using namespace std;
//1285 D2 아림이의 돌던지기
int main() {
int len;
cin >> len;
for (int l = 1; l <= len; l++){
int count = 0, min = 100000, n, distance;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> distance;
// 거리를 절대값으로 바꾼다.
distance = abs(distance);
//거리가 최소거리보다 작다면 바꿔주기
if (distance < min) {
min = distance;
count = 1;
}
//현재 최소거리와 같은사람이 있다면 카운트 증가
else if (distance == min)
count++;
}
cout << "#" << l << " " << min << " " << count << endl;
}
return 0;
}
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
최빈수 구하기 Python(SW Expert Academy) (0) | 2020.02.21 |
---|---|
수도 요금 경쟁 C++(SW Expert Academy) (0) | 2020.02.18 |
새로운 불면증 치료법 C++(SW Expert Academy) (0) | 2020.02.16 |
가랏! RC카! C++(SW Expert Academy) (0) | 2020.02.15 |
간단한 소인수분해 C++(SW Expert Academy) (0) | 2020.02.14 |
댓글