단순하게 배열에 값들을 저장하면서 정답을 구해주는 식으로도 풀 수 있지만,
규칙성을 찾아서 풀 경우 더 간단하게 풀 수 있다.
N=10, K=20일 때 1번 조의 팀원들의 점수는 아래와 같다.
번호 | 팀원의 점수 |
---|---|
1 | 1 |
2 | 40 |
3 | 41 |
4 | 80 |
5 | 81 |
6 | 120 |
7 | 121 |
8 | 160 |
9 | 161 |
10 | 200 |
번호 1의 점수 1은 0 * K, 번호 2의 점수 40은 2 * K, 번호 3의 점수 41은 2 * K + 1 ...
이런식으로 홀수번째의 팀원의 점수는 (i - 1) * K + 1, 짝수번째 팀원의 점수는 i * K 라는것을 알수 있다.
그리고 N이 짝수일때, 홀수일때도 값이 달라진다.
1 | 2 |
---|---|
1 | 2 |
4 | 3 |
5 | 6 |
= 10 | = 10 |
1 | 2 | 3 |
---|---|---|
1 | 2 | 3 |
6 | 5 | 4 |
7 | 8 | 9 |
= 14 | = 15 | = 16 |
즉, N이 짝수일 때는 팀원의 점수 합이 모두 같고 홀수일 때는 1씩 증가한다.
import java.util.*;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
StringBuffer sb = new StringBuffer();
int T = sc.nextInt();
for (int tc = 1; tc <= T; tc++) {
sb.append("#").append(tc).append(" ");
int N = sc.nextInt();
int K = sc.nextInt();
int sum = 0;
for(int i=1; i<=N; i++){
if(i % 2 == 0){
//짝수
sum += (i * K);
}else{
//홀수
sum += ((i-1) * K) + 1;
}
}
for(int i=0; i<K; i++){
if(N % 2 == 0){
sb.append(sum).append(" ");
}else{
sb.append(sum + i).append(" ");
}
}
sb.append("\n");
}
System.out.println(sb);
}
}