{ }codelper
겹친 조건크기 비교P0020

세 수의 가운데

정수 세 개 a, b, c가 한 줄에 빈칸으로 나뉘어 주어진다.
세 수를 크기 순서로 늘어놓았을 때 가운데에 오는 수를 출력하라.
같은 수가 있어도 된다(예: 5 5 1이면 가운데는 5).
정렬 함수나 목록 정렬을 쓰지 말고 비교만으로 풀어 보자.

입력
-1,000,000,000 ≤ a, b, c ≤ 1,000,000,000
출력
가운데 수 하나
예시 1 · stdin
3 9 5
stdout
5
예시 2 · stdin
5 5 1
stdout
5
main.py
입력(stdin)

실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).

$ 준비됐어요

코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.

다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이

같은 값이 있을 때가 함정이에요.
a < b < c or c < b < a처럼 <만 쓰면 5 5 1은 어느 갈래에도 안 걸려 마지막 else로 떨어져요.
a >= b로 먼저 둘로 나누고 그 안에서 c의 자리를 물으면(겹친 조건) 같은 값도 빠짐없이 들어가요.
비교를 이어 쓰는 a < b < c는 Python에서만 수학처럼 읽혀요.
C·C++·Java·C#·JS에서는 a < b && b < c로 나눠 써야 해요(C·C++·JS는 a < b < c가 문법상 되긴 하지만 (a < b)의 참거짓(1/0, true/false)을 c와 비교하는 엉뚱한 뜻이에요).
JS·TS는 입력을 Number로 바꾸지 않으면 문자열 비교("10" < "9"가 참)가 돼요.
크레이콘은 만약 (a >= b) { 만약 (…) { } 아니면 { } }처럼 안에 다시 써요.
갈래 안에서 처음 만든 변수는 바깥에서 쓸 수 없어서(Java·C#·C·C++도 마찬가지), mid를 갈래 앞에서 먼저 만들어 둬요(Python은 달라서 if 안에서 만든 변수도 밖에서 보여요).

Pythonmain.py · 16 줄
a, b, c = map(int, input().split())if a >= b:    if b >= c:        mid = b      # a >= b >= c    elif a >= c:        mid = c      # a >= c > b    else:        mid = a      # c > a >= belse:    if a >= c:        mid = a      # b > a >= c    elif b >= c:        mid = c      # b >= c > a    else:        mid = b      # c > b > aprint(mid)
JavaScriptmain.js · 12 줄
const [a, b, c] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);let mid;if (a >= b) {  if (b >= c) mid = b;  else if (a >= c) mid = c;  else mid = a;} else {  if (a >= c) mid = a;  else if (b >= c) mid = c;  else mid = b;}console.log(mid);
TypeScriptmain.ts · 13 줄
import { readFileSync } from "node:fs";const [a, b, c]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);let mid: number;if (a >= b) {  if (b >= c) mid = b;  else if (a >= c) mid = c;  else mid = a;} else {  if (a >= c) mid = a;  else if (b >= c) mid = c;  else mid = b;}console.log(mid);
JavaMain.java · 19 줄
import java.util.Scanner; public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int a = sc.nextInt(), b = sc.nextInt(), c = sc.nextInt();        int mid;        if (a >= b) {            if (b >= c) mid = b;            else if (a >= c) mid = c;            else mid = a;        } else {            if (a >= c) mid = a;            else if (b >= c) mid = c;            else mid = b;        }        System.out.println(mid);    }}
C#Main.cs · 24 줄
using System; class Program{    static void Main()    {        int[] v = Array.ConvertAll(Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries), int.Parse);        int a = v[0], b = v[1], c = v[2];        int mid;        if (a >= b)        {            if (b >= c) mid = b;            else if (a >= c) mid = c;            else mid = a;        }        else        {            if (a >= c) mid = a;            else if (b >= c) mid = c;            else mid = b;        }        Console.WriteLine(mid);    }}
C++main.cpp · 16 줄
#include <iostream> int main() {    int a, b, c, mid;    std::cin >> a >> b >> c;    if (a >= b) {        if (b >= c) mid = b;        else if (a >= c) mid = c;        else mid = a;    } else {        if (a >= c) mid = a;        else if (b >= c) mid = c;        else mid = b;    }    std::cout << mid << "\n";}
Cmain.c · 17 줄
#include <stdio.h> int main(void) {    int a, b, c, mid;    scanf("%d %d %d", &a, &b, &c);    if (a >= b) {        if (b >= c) mid = b;        else if (a >= c) mid = c;        else mid = a;    } else {        if (a >= c) mid = a;        else if (b >= c) mid = c;        else mid = b;    }    printf("%d\n", mid);    return 0;}
Craykonmain.cray · 36 줄
v = 콘솔.수들읽기();a = v[0];b = v[1];c = v[2];mid = 0;만약 (a >= b){    만약 (b >= c)    {        mid = b;    }    아니면 만약 (a >= c)    {        mid = c;    }    아니면    {        mid = a;    }}아니면{    만약 (a >= c)    {        mid = a;    }    아니면 만약 (b >= c)    {        mid = c;    }    아니면    {        mid = b;    }}콘솔.쓰기(mid);