코딩테스트/SWExpertAcademy

아름이의 돌 던지기 C++(SW Expert Academy)

멍토 2020. 2. 17.

난이도 : D2

문제번호 : 1285

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

아름이를 포함하여 총 N명의 사람이 돌 던지기 게임을 하고 있다.

이 돌 던지기 게임은 앞으로 돌을 던져 원하는 지점에 최대한 가깝게 돌을 던지는 게임이다.

정확하게 말하면 밀리미터 단위로 -100,000에서 100,000까지의 숫자가 일렬로 써져 있을 때, 사람들은 숫자 100,000이 써져 있는 위치에 서서 최대한 0에 가까운 위치로 돌을 던지려고 한다.

N명의 사람들이 던진 돌이 떨어진 위치를 측정한 자료가 주어질 때, 가장 0에 가깝게 돌이 떨어진 위치와 0 사이의 거리 차이와 몇 명이 그렇게 돌을 던졌는지를 구하는 프로그램을 작성하라.

입력

첫 번째 줄에 테스트 케이스의 수 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;
}

댓글

💲 광고입니다.