백준 알고리즘

백준 알고리즘 10817번: 세수

여의도비 2018. 8. 27. 22:52

지난번에 풀려다가 그냥 별 생각 안하고 넘어가서 다시 들고 왔다. (사실 if 문 마지막 단계 풀다 막혀서 온거다.) 이번 문제는 조금만 생각하면 금방 풀리는 문제다. 근데 왜 안풀고 넘어 갔을까 ? 


아래 문제 나가신다.

 

시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초256 MB35647159641428347.691%

문제

세 정수 A, B, C가 주어진다. 이 때, 두 번째로 큰 정수를 출력하는 프로그램을 작성하시오. 

입력

첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)

출력

두 번째로 큰 정수를 출력한다.

예제 입력 1 

20 30 10

예제 출력 1 

20

예제 입력 2 

30 30 10

예제 출력 2 

30

예제 입력 3 

40 40 40

예제 출력 3 

40

예제 입력 4 

20 10 10

예제 출력 4 

10





#


차근 차근 생각해서 보면 결국 세수를 비교 했을때 중간 수를 뽑을 수 있는 경우의 수를 if 문으로 만드면 된다. 그런데 if, else. if ,else로 계속 가면 코드가 난잡해지니 그 때 쓰라고 만든 else if 코드를 사용했다. 그렇게 해서 만든 소스코드는 아래에 있다.




#include <stdio.h>

using namespace std;


int main() {

int a = 0 , b = 0 , c = 0 ;

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

if(a < b){

if(b < c){

printf("%d", b);

}

else if(a < c){

printf("%d", c);

}

else

printf("%d", a);

}

else{

if(b > c){

printf("%d", b);

}

else if(a > c){

printf("%d", c);

}

else

printf("%d", a);

}


}



처음에는 else 부분을 만들지 않고 돌릴려다가, 만약 첫번 째 수가 두번 째 수보다 커지게 되면 되지 않는다는걸 뒤늦게 알고 그렇지 않은 경우를 고려해서 바로 작성했다. 이렇게 해서 짠 알고리즘이지만 뭔가 찜찜한 기분이 사라지지 않는다... 조금더 쉽고 간결하게 짤수 있는 방법이 있을까 했지만 아직까지는 안되는거 같다. 그래서 이 문제는 여기까지!