코딩테스트/코드업

여러 개씩 묶어 작은 값 골라 배열 만들기 5-7 C++(1498)[코드업, code up]

멍토 2019. 12. 27.

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

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

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

문제 주소입니다.

https://codeup.kr/problem.php?id=1498

 

[기초-배열연습] 여러 개씩 묶어 작은 값 골라 배열 만들기 5-7

n개의 데이터를 배열에 입력 받은 후, g개씩 묶어 비교한 후, 작은 값만 들어간 배열을 만들고 출력해보자. 6개의 데이터가 다음과 같이 입력되었을 때, 1 2 3 4 5 6 3개씩 묶어 비교한 후, 작은 값만 들어간 배열을 만들어 아래와 같이 출력하면 된다. 1 4

codeup.kr


1. 문제

2. 문제 해석

3. 소스 코드


문제

n개의 데이터를 배열에 입력 받은 후,

g개씩 묶어 비교한 후, 작은 값만 들어간 배열을 만들고 출력해보자.

6개의 데이터가 다음과 같이 입력되었을 때,
1 2 3 4 5 6

3개씩 묶어 비교한 후, 작은 값만 들어간 배열을 만들어
아래와 같이 출력하면 된다.

1 4

입력

첫 번째 줄에 배열의 크기 n과 묶을 개수 g가 입력된다.
두 번째 줄에 n개의 값(k)이 공백을 두고 입력된다.
[입력값의 정의역]
1<= g <= n <= 100
-1000 <= k <= 1000

출력

g개 씩 묶어 비교한 후 작은 값만 골라 저장한 배열을 출력한다.

입력 예시

5 3
1 3 5 4 2 

출력 예시

1 2 


2. 문제풀이


이 문제의 어려운점은 그룹으로 딱나누어 떨어지지 않는부분이라고 생각합니다.

인풋값이 5개인데 3그룹씩 묶으면 데이터 하나가 비어있기 때문입니다.

따라서 저는 데이터 크기가 넘기전까지만 비교를하며 계산을 했습니다.

자세한것은 아래의 소스코드에 적혀있습니다.

 


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
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int main() {
    //들어오는 개수, 묶는 단위, 배열
    int length, g, a[100]{ 1000 };
    cin >> length >> g;
    //입력받기
    for (int i = 0; i < length; i++)     cin >> a[i];
    //g만큼씩 증가시키며 반복
    for (int i = 0; i < length; i += g) {
        int num = a[i];
        //묶음만큼 반복처리
        for (int j = 0; j < g; j++) {
            //들어오는 데이터의 크기를넘어갔다면 정지
            if (i + j >= length)    break;
            //작은것 찾기
            num = min(num, a[i + j]);
        }
        cout << num << " ";
    }
    return 0;
}

댓글

💲 광고입니다.