세 수의 가운데
정수 세 개 a, b, c가 한 줄에 빈칸으로 나뉘어 주어진다.
세 수를 크기 순서로 늘어놓았을 때 가운데에 오는 수를 출력하라.
같은 수가 있어도 된다(예: 5 5 1이면 가운데는 5).
정렬 함수나 목록 정렬을 쓰지 말고 비교만으로 풀어 보자.
- 입력
- -1,000,000,000 ≤ a, b, c ≤ 1,000,000,000
- 출력
- 가운데 수 하나
3 9 5
5
5 5 1
5
정수 세 개 a, b, c가 한 줄에 빈칸으로 나뉘어 주어진다.
세 수를 크기 순서로 늘어놓았을 때 가운데에 오는 수를 출력하라.
같은 수가 있어도 된다(예: 5 5 1이면 가운데는 5).
정렬 함수나 목록 정렬을 쓰지 말고 비교만으로 풀어 보자.
3 9 5
5
5 5 1
5
실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).
$ 준비됐어요
코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.
같은 값이 있을 때가 함정이에요.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 안에서 만든 변수도 밖에서 보여요).
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)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);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);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); }}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); }}#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";}#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;}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);