https://www.acmicpc.net/problem/16204
앞 면에 O와 X가 적혀있는 카드 N개가 있다. N개의 카드 중 M개의 카드의 앞면에는 O가 한 개 적혀있고, 나머지 N-M개의 카드의 앞면에는 X가 한 개 적혀있다. 카드의 뒷 면은 두 종류의 카드 모두 같은 모양이라 구분할 수 없다.
카드의 뒷 면에 O나 X를 하나씩 적으려고 한다. 이 때, O는 K개, X는 N-K개 적으려고 한다.
앞 면과 뒷 면에 같은 모양이 적혀있는 카드의 최대 개수를 구하는 프로그램을 작성하시오.
첫째 줄에 N, M, K가 주어진다. (1 ≤ N ≤ 1,000,000, 0 ≤ M, K ≤ N)
첫째 줄에 앞 면과 뒷 면에 같은 모양이 적혀있는 카드의 최대 개수를 출력한다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Num16204 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); /* N은 카드의 수 동그라미 ) 카드 앞면의 M개의 동그라미 카드 뒷면의 K개의 동그라미 -> 앞면, 뒷면의 동그라미가 겹칠 최대 경우의 수는 "두 수 중 작은수" 엑스 ) 카드 앞면의 (N-M)개의 엑스 카드 뒷면의 (N-K)개의 엑스 -> 앞면, 뒷면의 엑스가 겹칠 최대 경우의 수는 "두 수 중 작은수" 작은 수 구하기 문제 => Math.min 사용 */ int N = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); int K = Integer.parseInt(st.nextToken()); System.out.println(Math.min(M,K) + Math.min((N-M),(N-K))); } }
문제를 보고나서, 주석으로 문제를 정리해보고 난 후,
if문을 사용해서 M개의 동그라미와 K개의 동그라미 갯수가 맞아떨어지는 경우를 구하려고 했던
나로서는 풀이를 보고 정말 터무니없는 발상이었던 것을 깨달았다
단순히 Math.min을 사용해서 두개를 더해주면 두 수 중 가장 작은수가 나온다는 것을 깨달았다.