본문 바로가기
알고리즘/SWEA

[Java] SWEA 8104번 조 만들기

by 컴공맨 2021. 1. 26.
 

SW Expert Academy

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

swexpertacademy.com


풀이

배열에 저장해서 풀기위해 직접 손으로 배열을 그려가며 하던 중!

우연히 규칙을 발견하고 이 규칙으로 풀릴까해서 풀어봤더니 풀려서 당황스러웠던 문제였습니다.

 

우선, 첫 번째 조를 구하는 방법은

N = 4, K = 6인 경우

  1조 2조 3조 4조 5조 6조
조원 1 1 2 3 4 5 6
조원 2 12 11 10 9 8 7
조원 3 13 12 11 10 9 8
조원 4 24 25 26 27 28 29

위 표에서 1조의 조원을 잘 보면 첫 번째와 세 번째 조원은 (0 * 6) + 1, (2 * 6) + 1이고 두 번째와 네 번째 조원은 2 * 6, 4 * 6인 것을 확인할 수 있습니다.

이를 통해서 1조의 경우 조원을 i로 표현하면 홀수 조원은 ((i - 1) * k) + 1 이고 짝수 조원은 i * k 가 될 수 있음을 알 수 있습니다.

 

N = 2, K = 3 1 2 3
  6 5 4
합계 7 7 7
N = 3, K = 3 1 2 3
  6 5 4
  7 8 9
합계 14 15 16

위의 표를 잘 보시면 N = 2인 경우 모든 조의 등수의 합이 똑같고 N = 3인 경우는 1조부터해서 1씩 증가함을 알 수 있습니다.

이를 통해서 N이 짝수라면 첫 번째 조의 등수의 합이 다른 조와 같고 N이 홀수라면 첫 번째 조의 등수의 합에서 조의 번호가 늘어갈 때 마다 +1씩 해주면 정답이 됩니다!


코드

import java.util.Scanner;

public class Solution {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		StringBuilder answer = new StringBuilder("");				
				
		int T = sc.nextInt();
		for (int tc = 1; tc <= T; ++tc) {
			int n = sc.nextInt();
			int k = sc.nextInt();
			
			answer.append("#" + tc + " ");
			
			int group_1_score = 0;			
			for (int i = 1; i <= n; ++i) {				
				if (i % 2 == 0) {
					// 짝수면 조원의 등수가 i * k씩 증가
					group_1_score += (i * k);
				}
				else {
					// 홀수면 조원의 등수가 (k * (i - 1)) + 1씩 증가
					group_1_score += ((i - 1) * k) + 1;
				}
			}
			
			for (int i = 0; i < k; ++i) {
				if (n % 2 != 0) {
					// 팀원의 수가 홀수면 첫 번째 팀 부터 맨 마지막 팀까지 +1 씩 증가
					answer.append((group_1_score + i) + " ");
				}
				else {
					// 짝수라면 모든 조의 합이 동일
					answer.append(group_1_score + " ");
				}
			}
			
			System.out.println(answer);		
			answer.setLength(0);
		}
		
		sc.close();
	}
}

 

pyo7410/Algorithm

1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.

github.com