※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀 더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소입니다.
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가 입력된다. |
출력
g개 씩 묶어 비교한 후 작은 값만 골라 저장한 배열을 출력한다. |
입력 예시
5 3 |
출력 예시
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;
}
|
'코딩테스트 > 코드업' 카테고리의 다른 글
진격 후 결과 C++(1509)[코드업, codeup] (0) | 2020.01.07 |
---|---|
나도 IQ 150 C++(1508)[코드업, code up] (0) | 2020.01.06 |
2차원 차이 배열 만들기 5-4 C++(1495)[코드업, Code up] (0) | 2019.12.26 |
1차원 차이 배열 만들기 5-3 C++(1494)[코드업, codeup] (0) | 2019.12.25 |
2차원 누적 합 배열 만들기 5-2 C++(1493)[코드업, code up] (0) | 2019.12.24 |
댓글