본문 바로가기
문제 해결/CodeUp

[CodeUp] [C++] 1425번 자리 배치

by WSLim_97 2024. 1. 22.
반응형

https://codeup.kr/problem.php?id=1425&rid=0

 

자리 배치

1. 첫 번째 줄에 학생 수(N)와 한줄에 앉을 수 있는 자리수(C)가 자연수로 주어진다. 단, (1≤N≤99), (1≤C≤10) 2. 둘째 줄에는 N명의 학생 키들이 공백으로 구분되어 입력된다.

codeup.kr


코드

#include <iostream>
using namespace std;

int main()
{
	int N, C, input, arr[99];

	cin >> N >> C;
	for (int i = 0; i < N; i++)
	{
		cin >> input;
		arr[i] = input;
	}

	for (int j = 0; j < N; j++)
	{
		int temp, min = 999, minIndex;
		for (int k = j; k < N; k++)
		{
			if (arr[k] <= min)
			{
				min = arr[k];
				minIndex = k;
			}
		}

		temp = arr[j];
		arr[j] = arr[minIndex];
		arr[minIndex] = temp;
	}

	int count = 1;
	for (int x = 0; x < N; x++)
	{
		cout << arr[x] << " ";

		if (count % C == 0)
			cout << "\n";

		count++;
	}

	return 0;
}

 


풀이

N명의 학생의 키를 입력받고 오름차순으로 정렬한 뒤 키가 작은 순서대로 한 줄에 C명씩 앉도록 출력하는 문제이다.

 

학생의 키를 입력받은 뒤 오름차순으로 정렬하는 방법으로는 선택 정렬을 사용하였다.

배열에서 가장 작은 값을 찾은 뒤 0번째 값과 바꾼다. 그다음 작은 값을 찾고 1번째 값과 바꾼다. 이 순서를 배열의 끝까지 반복하였다.

  1. arr[0]의 값과 arr 배열 내의 가장 작은 값의 위치를 바꾼다.
  2. arr[1]의 값과 arr 배열 내의 가장 작은 값의 위치를 바꾼다.
  3. ...
  4. 정렬을 완료한다.

 

배열의 값을 오름차순으로 정렬한 뒤 count를 1로 설정한다. 이때 count는 자리가 정해진 학생의 수라고 생각한다.

배열의 값을 출력하는 도중 count의 값이 C로 나머지 연산한 값이 0이라면 교실의 한 줄이 꽉 찬 것이므로 줄 바꿈을 진행한다.

반응형