반응형
서론
1등만 기억하는 세상.
학교에서 주는 문제를 풀다가 두 번째로 작은 숫자를 찾아야 했습니다. (사실 문자지만 문자나 숫자나~)
보통은 가장 큰 숫자, 가장 작은 숫자를 찾지만 두 번째라고 하니 조금 당황스러웠습니다.
본론
제가 작성한 코드는 이렇습니다.
어 그러니까, char을 input해서 그 값이 대문자일 때까지 받고 종료되면 알파벳 순서대로 했을 때 가장 먼저와, 그 다음 수를 출력한다고 해봅시다.
그러면, 제가 작성한 코드는 다음과 같습니다.
char input;
char first_char = 124, second_char = 124;
while (1)
{
scanf("%c",&input);
if(input >= 'A' && input <= 'Z')
{
break;
}
else
{
if(first_char > input)
{
second_char = first_char;
first_char = input;
}
else if (second_char > input && first_char < input)
{
second_char = input;
}
}
}
if(first_char != 124 && second_char != 124)
printf("%c%c",first_char,second_char);
else
printf("%c",first_char);
first_char이 가장 빠른 알파벳, second_char이 그 다음 알파벳입니다.
위 if문에서 second_char = first_char을 넣은 것이 핵심인데요,
첫 번째 보다 작은 수가 들어오면 원래 첫 번째로 있던 수가 두 번째로 작은 수가 되기에 이런 식으로 작성해줍니다.
이런 점을 미루어보면 세 번째 수를 읽어들이는 코드도 작성할 수 있겠네요.
결론
제가 이런 코드를 작성하고 다시 두 번째 수를 구하는 알고리즘을 찾아보니 이런 글이 있었습니다.
https://shoark7.github.io/programming/algorithm/second-largest-number-in-array
이 글에서도 같은 방법이라 좀 신기했습니다. 잘 정리되어 있더라고요.
감사합니다.
반응형