문제
문제 설명
세 개의 숫자가 주어질 때 작은 순서로 나열 했을 때, 두번째 수를 출력해보자.
예를 들어, 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;
}
'Algorithm > 코드업' 카테고리의 다른 글
[Codeup] 1180 : 만능 휴지통 (C언어) (0) | 2024.11.11 |
---|---|
[Codeup] 1173 : 30분전 (C언어) (0) | 2024.05.30 |
[Codeup] 1165 : 축구의 신 1 (C언어) (0) | 2024.05.29 |
[Codeup] 1085 : 소리 파일 저장용량 계산하기 (C언어) (0) | 2024.05.28 |
[Codeup] 1045 : 정수 2개 입력받아 자동 계산하기 (0) | 2024.05.26 |