-
3-6: 준혁이의 수열Math 2018. 10. 24. 20:01
준혁이의 수열 (sequencesum.cpp)
문제
준혁이는 양의 정수 N개로 이루어진 수열 A의 정체를 아무에게나 알려주고 싶지 않았다. 그래서 준혁이는 수열 A의 모든 두 수의 합만을 적어놓고 이를 S라고 했다. 이 때, 수열 A를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 수열의 크기 N이 주어진다. (3 ≤ N ≤ 1000)
다음 N개 줄에는 100,000보다 작거나 같은 양의 정수가 N개씩 주어진다. 이 숫자들은 S를 이루는 숫자이며, S(i,j) = A[i] + A[j] (i≠j), S(i,j) = 0 (i=j) 이다. S(i,j)는 i번째 줄, j번째 숫자를 의미하며, A[i]는 A의 i번째 수이다.
입력으로 주어지는 S에 해당하는 수열 A는 항상 유일하다.
출력
첫째 줄에 수열 A를 출력한다.
예제 입력
4 0 3 6 7 3 0 5 6 6 5 0 9 7 6 9 0
예제 출력
2 1 4 5
출처
COCI 2012/2013 Contest #6 2번
힌트
즉 S의 2행 3열(예제에서는 5)이 의미하는 바는 A[2] + A[3] (예제에서는 1+4) 이다.
import java.util.Scanner;
public class SequenceSum {
/**
*
* 준혁이는 양의 정수 N개로 이루어진 수열 A의 정체를 아무에게나 알려주고 싶지 않았다. 그래서 준혁이는 수열 A의 모든 두 수의 합만을 적어놓고 이를 S라고 했다. 이 때, 수열 A를 구하는 프로그램을 작성하시오.
*
* 첫째 줄에 수열의 크기 N이 주어진다. (3 ≤ N ≤ 1000)
*
* 다음 N개 줄에는 100,000보다 작거나 같은 양의 정수가 N개씩 주어진다. 이 숫자들은 S를 이루는 숫자이며, S(i,j) = A[i] + A[j] (i≠j), S(i,j) = 0 (i=j) 이다. S(i,j)는 i번째 줄, j번째 숫자를 의미하며, A[i]는 A의 i번째 수이다.
*
* 입력으로 주어지는 S에 해당하는 수열 A는 항상 유일하다.
*
* 4
* 0 3 6 7
* 3 0 5 6
* 6 5 0 9
* 7 6 9 0
*
* 2 1 4 5
*
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int S[][] = new int[N][N];
int A[] = new int[N];
for (int i=0; i<N; i++){
for (int j=0; j<N; j++){
S[i][j] = sc.nextInt();
}
}
// for (int i=0; i<N; i++){
// for (int j=0; j<N; j++){
//
// }
// }
for (int i=0; i<N-2; i++){
A[i] = (S[i][i+1] + S[i][i+2] - S[i+1][i+2])/2;
}
A[N-2] = S[N-3][N-2] - A[N-3];
A[N-1] = S[N-2][N-1] - A[N-2];
for (int i=0; i<N; i++){
System.out.print(A[i] + " ");
}
}
}'Math' 카테고리의 다른 글
3-8: 조합 0의 개수 (0) 2018.10.24 3-7: 파스칼의 삼각형과 조합 (0) 2018.10.24 3-5: 홍준이와 수열 (PROSJEK) (0) 2018.10.24 3-4: 피보나치 수열 (0) 2018.10.24 3-3: Fly me to the Alpha Centauri (0) 2018.10.24