본문 바로가기

알고리즘(백준 등) 공부

SWEA 25695. 세 정수

세 정수 a, b, c에 대해서 Max(a, b) = x, Max(b, c) = y, Max(c, a) = z 이고 x, y, z가 주어질 때, a, b, c가 존재할 수 없다면 "-1 -1 -1"을, 존재할 경우에 대해 "a b c"를 출력하는 문제이다.

 

x, y, z의 관계에 대해서 분석하면 x > y 라면 Max(a, b) > Max(b, c) 이므로 공통인 b는 최대값이 될 수 없고, c 또한 최대값이 될 수 없으므로 a가 최대값이며 x가 된다. b는 y가 되며 c 또한 y가 되는데, 만약 Max(c, a)인 z가 최대값인 x가 아니라면 존재할 수 없게 되므로 "-1 -1 -1"을 출력하게 한다.

if(x > y) {
    if(z != x) {
        sb.append("-1 -1 -1").append('\n');
        continue;
    }
    long a = x, b = y, c = y;
    sb.append(a).append(" ").append(b).append(" ").append(c).append('\n');
    continue;
}

 

 

y > x 또한 마찬가지로 Max(b, c) > Max(a, b) 이므로, c가 최대값 y가 되며 b는 x, a는 x가 된다. z가 y가 아니라면 존재할 수 없게 되므로 "-1 -1 -1"을 출력하게 한다.

if(y > x) {
    if(y != z) {
        sb.append("-1 -1 -1").append('\n');
        continue;
    }
    long a = x, b = x, c = y;
    sb.append(a).append(" ").append(b).append(" ").append(c).append('\n');
    continue;
}

 

 

x == y 의 경우는 Max(a, b) == Max(b, c) 이므로 b가 최대값이며 a와 c가 같은 값이 되게 된다. z가 x나 y보다 클 수 없으며 그럴 경우은 존재할 수 없게 되므로 "-1 -1 -1"을 출력하게 한다.

if(z > x) {
    sb.append("-1 -1 -1").append('\n');
    continue;
}
sb.append(z).append(" ").append(y).append(" ").append(z).append('\n');

 

 

전체 코드는 다음과 같다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution {
	
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();
        while(T-- > 0) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            long x = Long.parseLong(st.nextToken()), y = Long.parseLong(st.nextToken());
            long z = Long.parseLong(st.nextToken());
			
            //Max(a,b) > Max(b,c) -> a > b && a > c  -> a가 최대값이며 b는 최대값이 될 수 없음
            if(x > y) {
                if(z != x) {
                    sb.append("-1 -1 -1").append('\n');
                    continue;
                }
                long a = x, b = y, c = y;
                sb.append(a).append(" ").append(b).append(" ").append(c).append('\n');
                continue;
            }
			
            //Max(b,c) > Max(a,b) -> c > a && c > b ->  c가 최대값이며 b가 최대값이 될 수 없음
            if(y > x) {
                if(y != z) {
                    sb.append("-1 -1 -1").append('\n');
                    continue;
                }
                long a = x, b = x, c = y;
                sb.append(a).append(" ").append(b).append(" ").append(c).append('\n');
                continue;
            }
			
            if(z > x) {
                sb.append("-1 -1 -1").append('\n');
                continue;
            }
            sb.append(z).append(" ").append(y).append(" ").append(z).append('\n');
        }
        br.close();
        System.out.print(sb);
    }
}

'알고리즘(백준 등) 공부' 카테고리의 다른 글

SWEA 24696. 직육면체 자르기  (0) 2026.04.13
SWEA 25330. 거리 문자열  (0) 2026.04.12
SWEA 25837. 합과 곱  (0) 2026.04.08
SWEA 25838. 여우 줄이기  (0) 2026.04.07
SWEA 26011. 정수들의 합  (0) 2026.04.05