https://www.acmicpc.net/problem/10817
문제
세 정수 A, B, C가 주어진다. 이때, 두 번째로 큰 정수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)
출력
두 번째로 큰 정수를 출력한다.
코드(1)
using System;
public class Program {
public static void Main()
{
bool isGoing = true;
while (isGoing)
{
// 입력 첫째줄 : 세 정수 A,B,C가 공백으로 구분되어 주어진다. A,B,C의 범위는 1보다 크거나 같거나 100보다 작거나 같다.
string[] Numbers = Console.ReadLine().Split(' ');
int a = int.Parse(Numbers[0]);
int b = int.Parse(Numbers[1]);
int c = int.Parse(Numbers[2]);
int highNumber = 0;
if (a < 1 || b < 1 || c < 1 || a > 100 || b > 100 || c > 100) return;
// 출력 첫째줄 : 세 정수 중 두번 째로 큰 수가 출력된다.
// - 세 정수를 비교해야한다.
// - (1) a > b 경우, (2) a < b 경우
// - (1) a > b 경우 -> (1-1) a < c 경우, (1-2) a > c 경우;
// - (2) a < b 경우 -> (2-1) b < c 경우, (2-2) b > c 경우;
if (a > b)
{
highNumber = a;
if ( a > c)
{
}
else if ( a < c)
{
highNumber = c;
}
}
else if (a < b)
{
highNumber = b;
if ( b > c)
{
}
else if ( b < c)
{
highNumber = c;
}
}
Console.WriteLine(highNumber);
}
}
}
입력
설명을 위해서 길게 풀어써놨다. 먼저 Numbers에 공백으로 구분된 세 수를 입력받는다. 그리고 각각 정수형 a,b,c에 값을 차례대로 넣어준다. 일단 세 정수를 받는 작업이 끝났다. - 입력완료
계산
그럼 이제 세 수 중 가장 큰 수를 구별해야한다. 그냥 if문으로 경우의 수를 차례차례 써나가면 된다. 그럼 highNumber에 가장 큰 수가 들어간다.
그런데 틀렸다. 봤더니 세 수가 동일한 경우를 생략했었다. 다시 코드로 가 세 수가 동일한 경우를 추가한다.
else if (a == b)
{
highNumber = a;
if (a == c)
{
}
else if (a > c)
{
}
else if ( a < c)
{
highNumber = c;
}
}
a == b 인 경우를 추가했다. 빈 조건문은 값이 변경될 필요가 없기 때문에 공백이다. 그럼 마지막으로 불필요한 코드를 제거해줘서 깔끔하게 볼수있게한다.
using System;
public class Program {
public static void Main()
{
bool isGoing = true;
while (isGoing)
{
// 입력 첫째줄 : 세 정수 A,B,C가 공백으로 구분되어 주어진다. A,B,C의 범위는 1보다 크거나 같거나 100보다 작거나 같다.
string[] Numbers = Console.ReadLine().Split(' ');
int a = int.Parse(Numbers[0]);
int b = int.Parse(Numbers[1]);
int c = int.Parse(Numbers[2]);
int highNumber = 0;
//예외처리
if (a < 1 || b < 1 || c < 1 || a > 100 || b > 100 || c > 100) return;
// 출력 첫째줄 : 세 정수 중 두번 째로 큰 수가 출력된다.
// - 세 정수를 비교해야한다.
if (a > b)
{
highNumber = a;
if ( a < c)
{
highNumber = c;
}
}
else if (a < b)
{
highNumber = b;
if ( b < c)
{
highNumber = c;
}
}
else if (a == b)
{
highNumber = a;
if ( a < c)
{
highNumber = c;
}
}
Console.WriteLine(highNumber);
}
}
}
완성!
콘솔실행화면
문제를 잘못봤다. 보니까 두번째로 큰 수를 구하란거였는데... 가장 큰 수를 구하고 있었다... 바보네
고쳐쓴 코드
using System;
public class Program {
public static void Main()
{
bool isGoing = true;
while (isGoing)
{
// 입력 첫째줄 : 세 정수 A,B,C가 공백으로 구분되어 주어진다. A,B,C의 범위는 1보다 크거나 같거나 100보다 작거나 같다.
string[] Numbers = Console.ReadLine().Split(' ');
int a = int.Parse(Numbers[0]);
int b = int.Parse(Numbers[1]);
int c = int.Parse(Numbers[2]);
int middleNumber = 0;
//예외처리
if (a < 1 || b < 1 || c < 1 || a > 100 || b > 100 || c > 100) return;
// 출력 첫째줄 : 세 정수 중 두번 째로 큰 수가 출력된다.
// - 세 정수를 비교해야한다.
if (a > b)
{
if (a > c)
{
if (b > c)
{
middleNumber = b;
}
else
{
middleNumber = c;
}
}
else
{
middleNumber = a;
}
}
else if ( a < b)
{
if ( b > c)
{
if ( a > c)
{
middleNumber = a;
}
else
{
middleNumber = c;
}
}
else
{
middleNumber = b;
}
}
else if (a == b)
{
middleNumber = a;
}
Console.WriteLine(middleNumber);
}
}
}
.... 다해보고 다른사람이 한 코드를 봤는데 훨씬 쉽게하는걸 볼수있었다. 자괴감... 별의 별 방법이 다있었다. 나는 노가다를 했다.