본문 바로가기
Algorithm/코드업

[Codeup] 1167 : 두 번째 수 (C언어)

by 이호수 2024. 5. 30.

문제

문제 설명   

세 개의 숫자가 주어질 때 작은 순서로 나열 했을 때, 두번째 수를 출력해보자.

예를 들어, 5 9 2 가 있다면, 작은 순서로 나열하면 2 5 9이고 두번째 수는 5이다.

 
입력
세 개의 정수가 공백으로 구분되어 입력된다. 

출력
세 개의 정수를 작은 순서로 나열 했을 때, 두번째 수를 출력한다.


입력 예시   예시 복사

201 20 3

 

출력 예시

20

 

 

 

풀이

두 가지 방법으로 풀어보았다.

 

먼저, 일일이 비교하여 직관적으로 중간 숫자를 구하는 방법이다. 정렬 알고리즘을 배우지 않았을 때 나오는 문제라 이 방법이 더 쉬울 것 같다.

a가 가장 클 때, b가 가장 클 때, c가 가장 클 때로 나눈 후, 그 안에서 또 나머지 변수를 비교하여 중간 값을 mid변수에 입력해주었다.

#include <stdio.h>

int main() {
    int a, b, c;
    int mid;
    scanf("%d %d %d", &a, &b, &c);
    if(a>=b && a>=c){ //a가 가장 클 경우
        if(b>=c) mid = b;
        else mid = c;
    }
    else if(b>=a && b>=c){ //b가 가장 클 경우
        if(a>=c) mid = a;
        else mid = c;
    }
    else{ //c가 가장 클 경우
        if(a>=b) mid = a;
        else mid = b;
    }
    printf("%d", mid);
    return 0;
}

 

두 번째 방법은 세 수를 정렬시키는 방법이다. 

a-b, b-c, a-b를 비교하여 정렬시키는데, 더 궁금하면 '버블 정렬'이라는 키워드로 찾아보시면 될 듯 하다.

또, 두 변수의 값을 교환하는 원리도 등장하는데, 이것도 처음 접하는 사람은 어려울 것 같아서 따로 글을 써보려고 한다.

#include <stdio.h>

int main() {
    int a, b, c, tmp;
    scanf("%d %d %d", &a, &b, &c);
    if(a>=b){
        tmp = a;
        a = b;
        b = tmp;
    }
    if(b>=a && b>=c){
        tmp = b;
        b = c;
        c = tmp;
    }
    if(a>=b){
        tmp = a;
        a = b;
        b = tmp;
    }
    
    printf("%d", b);
    return 0;
}