{ }codelper
크기 비교P0227

사흘 기온의 흐름

사흘 동안의 낮 최고 기온을 보고 기온의 흐름을 적는다. 첫 줄에 기록 수 n이, 다음 n줄에 기록마다 첫날·둘째 날·셋째 날의 기온 a, b, c가 차례로 빈칸 하나씩 띄워 주어진다. 기록마다 한 줄에, a < b < c이면 "오름", a > b > c이면 "내림", 그 밖이면 "섞임"를 출력하라. 이틀 이상 기온이 같으면 점점 오른 것도 점점 내린 것도 아니므로 "섞임"다(예: 3 3 5). 오르다가 내리거나 내리다가 오르는 것도 "섞임"다.

입력
1 ≤ n ≤ 1,000, −50 ≤ a, b, c ≤ 50(정수)
출력
n줄, 줄마다 up · down · mixed 가운데 하나
예시 1 · stdin
4
3 8 12
12 8 3
5 9 2
4 4 6
stdout
오름
내림
섞임
섞임
main.py
입력(stdin)

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

$ 준비됐어요

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

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

수학처럼 a < b < c라고 쓸 수 있는지가 언어마다 달라요.
Python만 이것을 a < b and b < c로 읽어 줘요.
JS에서는 오류 없이 (a < b) < c로 계산되고, C·C++도 gcc에서는 그대로 컴파일되어 그렇게 계산해요(-Wall을 주어야 경고가 나와요.
최신 clang은 기본으로 오류로 막아요).
앞의 비교 결과 true·false가 1·0이 되어 c와 비교되니, 5 9 2처럼 오르다 내린 기록도 c가 1보다 크면 up이 돼요.
Java·C#은 boolean과 int를 비교할 수 없다는 컴파일 오류를 내고, TS도 boolean과 number는 비교할 수 없다는 타입 오류로 막아 줘요.
크레이콘은 실행하기 전에 'a < b && b < c처럼 둘로 나눠 써요'라고 알려 줘요.
그래서 Python 말고는 a < b && b < c처럼 둘로 나눠 써요.
두 번째 함정은 경계예요.
< 대신 <=를 쓰면 3 3 5가 up이 돼요.
세 번째 함정은 읽은 문자열을 수로 바꾸지 않는 것이에요.
Python input().split()이나 JS split(" ")로 나눈 값은 문자열이라, 비교가 글자 차례로 되어 "9" < "10"이 거짓이 돼요.
Python int, JS·TS Number, 크레이콘 수로변환으로 바꾼 다음 비교해요.

Pythonmain.py · 10 줄
n = int(input())for _ in range(n):    a, b, c = map(int, input().split())    # Python은 a < b < c를 a < b and b < c로 읽는다    if a < b < c:        print("오름")    elif a > b > c:        print("내림")    else:        print("섞임")
JavaScriptmain.js · 11 줄
const lines = require("fs").readFileSync(0, "utf8").split("\n");const n = Number(lines[0]);const out = [];for (let i = 1; i <= n; i++) {  const [a, b, c] = lines[i].trim().split(/\s+/).map(Number);  // a < b < c는 (a < b) < c가 되어 true/false를 c와 비교한다. 둘로 나눠 쓴다  if (a < b && b < c) out.push("오름");  else if (a > b && b > c) out.push("내림");  else out.push("섞임");}console.log(out.join("\n"));
TypeScriptmain.ts · 12 줄
import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const n: number = Number(lines[0]);const out: string[] = [];for (let i = 1; i <= n; i++) {  const [a, b, c]: number[] = lines[i].trim().split(/\s+/).map(Number);  // TS는 a < b < c를 타입 오류로 막는다(boolean과 number를 비교). 둘로 나눠 쓴다  if (a < b && b < c) out.push("오름");  else if (a > b && b > c) out.push("내림");  else out.push("섞임");}console.log(out.join("\n"));
JavaMain.java · 22 줄
import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer; public class Main {    public static void main(String[] args) throws Exception {        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        int n = Integer.parseInt(br.readLine().trim());        StringBuilder out = new StringBuilder();        for (int i = 0; i < n; i++) {            StringTokenizer st = new StringTokenizer(br.readLine());            int a = Integer.parseInt(st.nextToken());            int b = Integer.parseInt(st.nextToken());            int c = Integer.parseInt(st.nextToken());            // a < b < c는 컴파일 오류다(boolean과 int는 비교할 수 없다)            if (a < b && b < c) out.append("오름\n");            else if (a > b && b > c) out.append("내림\n");            else out.append("섞임\n");        }        System.out.print(out);    }}
C#Main.cs · 21 줄
using System;using System.Text; class Program{    static void Main()    {        int n = int.Parse(Console.ReadLine().Trim());        var sb = new StringBuilder();        for (int i = 0; i < n; i++)        {            string[] p = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries);            int a = int.Parse(p[0]), b = int.Parse(p[1]), c = int.Parse(p[2]);            // a < b < c는 컴파일 오류다. 둘로 나눠 &&로 잇는다            if (a < b && b < c) sb.Append("오름\n");            else if (a > b && b > c) sb.Append("내림\n");            else sb.Append("섞임\n");        }        Console.Write(sb);    }}
C++main.cpp · 15 줄
#include <iostream> int main() {    std::ios::sync_with_stdio(false);    int n;    std::cin >> n;    for (int i = 0; i < n; i++) {        int a, b, c;        std::cin >> a >> b >> c;        // a < b < c도 컴파일되지만 (a < b)의 true/false를 c와 비교한다        if (a < b && b < c) std::cout << "오름\n";        else if (a > b && b > c) std::cout << "내림\n";        else std::cout << "섞임\n";    }}
Cmain.c · 15 줄
#include <stdio.h> int main(void) {    int n;    scanf("%d", &n);    for (int i = 0; i < n; i++) {        int a, b, c;        scanf("%d %d %d", &a, &b, &c);        /* a < b < c도 컴파일되지만 (a < b)의 1이나 0을 c와 비교한다 */        if (a < b && b < c) puts("오름");        else if (a > b && b > c) puts("내림");        else puts("섞임");    }    return 0;}
Craykonmain.cray · 21 줄
n = 콘솔.줄읽기().수로변환();반복 (i = 0; i < n; i++){    p = 콘솔.줄읽기().공백제거().나누기(" ");    a = p[0].수로변환();    b = p[1].수로변환();    c = p[2].수로변환();    // a < b < c는 (a < b)의 참거짓을 c와 비교한다. 둘로 나눠 &&로 잇는다    만약 (a < b && b < c)    {        콘솔.쓰기("오름");    }    아니면 만약 (a > b && b > c)    {        콘솔.쓰기("내림");    }    아니면    {        콘솔.쓰기("섞임");    }}