Algorithm/SW Expert Academy

[SWEA] 3142 영준이와 신비한 뿔의 숲

SSONGMI 2021. 2. 14. 21:41
반응형

: 뿔이 한개 달린 유니콘과 뿔이 두개 달린 트윈혼이 있다.

: N은 뿔의 수를 모두 더한 값이고, M은 유니콘과 트윈혼이 모두 합쳐서 몇마리 인지를 나타낸다.

: 연립방정식으로 이중 for문을 돌려가며 풀어도 되지만, 역행렬을 이용하면 더 쉽게 풀 수 있다.

: 우선 주어진 식을 행렬식으로 나타내면 아래와 같다.

기본 행렬식

: 2X2 정방행렬의 역행렬은 다음과 같이 나타낼 수 있다.

2X2행렬의 역행렬

: 따라서 위와 같은 형식으로 앞서 구한 행렬식을 바꿔보면 다음과 같다

: 따라서 유니콘 수는 -N+2M이 되고, 트윈혼의 수는 N-M이 된다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Solution {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringBuilder sb = new StringBuilder();
    static StringTokenizer st;
 
    public static void main(String[] args) throws NumberFormatException, IOException {
 
        int T = Integer.parseInt(br.readLine());
 
        for (int tc = 1; tc <= T; tc++) {
            st = new StringTokenizer(br.readLine());
 
            // N개의 뿔과 M마리의 짐승
            int N = Integer.parseInt(st.nextToken());
            int M = Integer.parseInt(st.nextToken());
 
            // 역행렬 이용
            // X: 유니콘 수       Y: 트윈혼 수
            int X = -N + 2 * M;
            int Y = N - M;
             
            sb.append(String.format("#%d %d %d\n", tc, X, Y));
        }
        System.out.println(sb);
    }
}

 

반응형