SWEA/[D2]

[C언어] SWEA 1285 아름이의 돌 던지기

ruming 2022. 3. 1. 17:04

문제

N명의 사람이 돌 던지기 게임을 한다.

-100,000부터 100,000까지 숫자가 일렬로 써져 있고, 사람들은 100,000에서 최대한 0에 가깝게 돌을 던진다.

가장 0에 가깝게 돌이 떨어진 위치와 0 사이의 거리 차이, 그렇게 던진 사람이 몇 명인지 구한다.

 

조건

1<=N<=1,000

돌이 떨어지는 위치는 항상 -100,000에서 100,000 사이 범위의 정수

 

코드

#include <stdio.h>
int main(void) {
    int test_case, T;
    scanf("%d", &T);
    for (test_case = 1; test_case <= T; ++test_case)
    {
        int N, *p;
        scanf("%d", &N);
        p = (int*)malloc(sizeof(int) * N);
        for (int i = 0; i < N; i++) {
            scanf("%d", &p[i]);
        }
        int min = p[0], cnt = 0;
        if (p[0] < 0) {
            p[0] = -p[0];
            min = p[0];
        }
        else    min = p[0];
        for (int i = 1; i < N; i++) {
            if (p[i] < 0) {
                p[i] = -p[i];
            }
            if (p[i] < min) {
                min = p[i];
            }
        }
        for (int i = 0; i < N; i++) {
            if (p[i] == min) {
                cnt++;
            }
        }
        printf("#%d %d %d\n", test_case, min, cnt);
    }
    return 0;
}

최솟값과 그 개수를 구하면 된다. 비교를 위해 부호가 -인 수는 +로 바꿔주었다. 

배열 중에 min보다 작은 값이 있으면 그 수를 min에 저장한다. 

min을 구했으면 for문을 한 번 더 돌려 최솟값의 개수를 찾는다.