문제
삼성대학교 프로그래밍 기초 과목에서 조별과제를 위해 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();
}
}
}
출처
'Problem Solving > SWEA' 카테고리의 다른 글
[SWEA] [S/W 문제해결 응용] 2일차 - 최대 상금 (0) | 2020.02.24 |
---|---|
[SWEA] 8500. 극장 좌석 (0) | 2020.02.24 |
[SWEA] 7964. 부먹왕국의 차원 관문 (0) | 2020.02.24 |
[SWEA] 7728. 다양성 측정 (0) | 2020.02.24 |
[SWEA] 7532. 세영이의 SEM력 연도 (0) | 2020.02.24 |
댓글