[C]백준_2752 : 세수정렬

Alal11·2023년 2월 11일
0
post-thumbnail

출처

https://www.acmicpc.net/problem/2752


문제

동규는 세수를 하다가 정렬이 하고싶어졌다.

숫자 세 개를 생각한 뒤에, 이를 오름차순으로 정렬하고 싶어 졌다.

숫자 세 개가 주어졌을 때, 가장 작은 수, 그 다음 수, 가장 큰 수를 출력하는 프로그램을 작성하시오.


입력

숫자 세 개가 주어진다. 이 숫자는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 이 숫자는 모두 다르다.


출력

제일 작은 수, 그 다음 수, 제일 큰 수를 차례대로 출력한다.


예제 입출력


알고리즘 분류

  • 정렬

➡️문제 분석

숫자 3개를 입력했을 때, 오름차순으로 정렬하여 출력하는 문제이다.


➡️코드-1(⭕)

#include <stdio.h>

int main(void)
{
	int a, b, c;

	scanf("%d %d %d", &a, &b, &c);

	if (a < b && b < c) {
		printf("%d %d %d", a, b, c);
	}
	else if (a < c && c < b) {
		printf("%d %d %d", a, c, b);
	}
	else if (b < c && c < a) {
		printf("%d %d %d", b, c, a);
	}
	else if (b < a && a < c) {
		printf("%d %d %d", b, a, c);
	}
	else if (c < b && b < a) {
		printf("%d %d %d", c, b, a);
	}
	else
		printf("%d %d %d", c, a, b);

	return 0;
}

➡️코드-2(⭕)

#include <stdio.h>

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

➡️코드 분석

코드-1

if 문으로 각 경우의 수를 나누어서 해당 경우의 순으로 출력해준다.

코드-2

  1. a, b, c 순으로 크기를 맞추기 위해 a를 가장 작은 수로, c를 가장 큰 수로 해줘야 한다.

  2. a가 b보다 큰 경우, 변수 t를 임시 저장소로 이용하여 a와 b의 값을 바꿔준다.

  3. b가 c보다 큰 경우, b와 c의 값을 서로 바꿔주면 c가 젤 큰 수가 된다.

  4. 마지막으로 a가 b보다 큰 경우, 값을 서로 바꿔주면 a가 젤 작은 수가 된다.


➡️end

이 문제를 c언어 배운지 얼마 안됐을 때 풀었는데 코드-1이 지금보니 너무 노가다 식이라 웃긴다ㅋㅋㅋㅋ 차라리 중첩 if문을 사용하는게 더 나았을건데ㅋㅋㅋ

0개의 댓글