본문 바로가기
Problem Solving/SWEA

[SWEA] 8104. 조 만들기

by 테리는당근을좋아해 2020. 2. 24.

문제

삼성대학교 프로그래밍 기초 과목에서 조별과제를 위해 N명으로 구성된 조를 K개 만들고자 한다.

프로그래밍 과목의 수강 인원은 정확히 N × K명이기 때문에, 완벽하게 조를 구성하는 것이 가능하다.

조에 들어가는 사람들의 실력을 최대한 균등하게 하기 위해 이미 치른 중간고사 성적을 이용한다.

성적은 모든 학생들이 달랐기 때문에, 1등에서 N × K등의 학생이 정해져 있다.

각 조에 1번에서 K번까지의 번호를 붙인 다음과 같이 K개의 조를 구성한다.

- 1등에서 K등인 학생은 순서대로 1번 조에서 K번 조까지 들어간다.

- K+1등에서 2K등인 학생은 역순으로 1번 조에서 K번 조까지 들어간다.

- 2K+1등에서 3K등인 학생은 순서대로 1번 조에서 K번 조까지 들어간다.

- …

예를 들어, N = 10 K = 20이면, 1번 조에는 1등, 40등, 41등, 80등, 81등, 120등, 121등, 160등, 161등, 200등인 학생이 들어간다.

교수님은 각 조의 실력이 조원인 학생들의 등수를 모두 더한 것이라고 생각한다.

즉, 앞의 예에서 든 1번 조의 실력은 1+40+41+80+81+120+121+160+161+200=1005이다.

N, K가 주어질 때, 1번 조에서 K번 조까지 실력을 순서대로 모두 구하는 프로그램을 작성하라.

 

풀이방법

N X K 크기의 2차원 배열을 선언한다. 

 

1부터 시작해 각 행에 값을 초기화해주는데 이 때, 행이 짝수일 경우 0번째 열부터 값을 넣어주고

 

행이 홀수일 경우 마지막열부터 값을 넣어준다.

 

배열의 값을 다 넣었다면 각 열의 합을 출력한다.

 

소스코드

package samsung;

import java.util.*;

public class s_8104 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int test = sc.nextInt();
		
		for(int t = 1; t <= test; t++) {
			int n = sc.nextInt();
			int k = sc.nextInt();
			int cnt = 1;
			int[][] a = new int[n][k];
			
			for(int i = 0; i < n; i++) {
				if(i % 2 ==0) {
					for(int j = 0; j < k; j++) {
						a[i][j] = cnt;
						cnt++;
					}
				}
				else {
					for(int j = k - 1; j >= 0; j--) {
						a[i][j] = cnt;
						cnt++;
					}
				}
			}
			System.out.print("#" + t + " ");
			for(int i = 0; i < k; i++) {
				int sum = 0;
				for(int j = 0; j < n; j++) {
					sum += a[j][i];
				}
				System.out.print(sum + " ");
			}
			System.out.println();
		}
	}
}

 

출처

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWwXCn2KQjEDFATu&categoryId=AWwXCn2KQjEDFATu&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

댓글