문제 설명
A중학교에 첫 발령을 받은 B교사는 1학년 1반 담임을 맡게 되었다.
기대를 안고 첫 출근한 B교사는 너무 설렌 나머지 학생들이 등교하기도 전에 교실에 가서 학생들이 오기만을 기다리고 있었다.
그리고 제일 먼저 무슨 일을 해야 될지 생각하던 중 학생들 자리 배치를 우선적으로 해야겠다고 생각했다.
여러 가지 자리 배치 방법을 고려하다가 학생들의 키가 작은 순서대로 앞에서부터 앉히는 것이 제일 좋은 방법이라고
결정하게 되었다.
예를 들어, 160, 165, 164, 165, 150, 165, 168, 145, 170의 학생들 키가 주어지고 한 줄에 6명씩 앉는다면 다음과 같이
앉으면 될 것이다.
145 | 150 | 160 | 164 | 165 | 165 |
165 | 168 | 170 |
왼쪽 위부터 차례대로 키 순서대로 앉으며 한 줄이 다 찼을 경우 다음 줄로 넘어간다. 다음 줄도 마찬가지로 왼쪽부터
채운다.
이와 같이 학생의 키순서대로 자리를 배치하는 프로그램을 작성하시오.
입력
1. 첫 번째 줄에 학생 수(N)와 한줄에 앉을 수 있는 자리수(C)가 자연수로 주어진다. 단, (1≤N≤99), (1≤C≤10)
2. 둘째 줄에는 N명의 학생 키들이 공백으로 구분되어 입력된다.
출력
학생들의 자리 배치 결과를 공백으로 분리하여 출력한다.
(표현오류 조심 : 각 행의 마지막에 공백을 한 칸 넣어야 됨.)
입력 예시
9 6
160 165 164 165 150 165 168 145 170
출력 예시
145 150 160 164 165 165
165 168 170
<내 소스>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, c;
vector<int> v;
cin >> n >> c;
for (int i = 0; i < n; i++) {
int temp;
cin >> temp;
v.push_back(temp);
}
sort(v.begin(), v.end());
for (int i = 0; i < v.size(); i++) {
if ((i + 1) % c == 0) cout << v[i] << " " << endl;
else cout << v[i] << " ";
}
}
<다른 사람의 소스>
#include <stdio.h>
int main()
{
int a[100];
int i, j, t, n, k;
scanf("%d %d", &n, &k);
for(i = 0; i < n; i++)
scanf("%d",&a[i]);
for(i = 0; i < n-1; i++)
for(j = i+1; j < n; j++)
if(a[i]>a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
for(i = 1; i <= n; i++) {
printf("%d ", a[i-1]);
if(i%k==0) printf("\n");
}
}
다른 사람의 소스를 보니, 알고리즘은 같았다.
나는 C++의 algorithm에 있는 sort함수를 사용했고, 다른 사람의 소스는 직접 구현하였다.
그 외 나머지 알고리즘은 같다.
n과 c를 입력받은후, 배열에 키를 넣어준다.
그리고 나서 정렬한후, 쭉 출력해주되 c번째마다 개행을 해주면 된다.
'PS > CodeUp' 카테고리의 다른 글
CodeUp / 1차원 배열 / 1440번 / 비교 / C++ (0) | 2020.10.03 |
---|---|
CodeUp / 1차원 배열 / 1430번 / 기억력 테스트2 / C++ (0) | 2020.10.03 |
CodeUp / 1차원 배열(?) / 1420번 / 3등 찾기 / C++ (0) | 2020.10.03 |
CodeUp / 1차원 배열 / 1416번 / 2진수 변환 / C++ (0) | 2020.10.03 |