배열을 사용하지않는 두번째로 작은 수가 핵심 키워드였는데, 반복문안에서 구현했어야했다. 시험도중에는 계속 가장 작은수를 찾고 그 수와 차잇값을 가지고 어떻게 해보려는 시도를 했었었는데 실패했다.
시험이 끝난 후, 틀린문제를 복습해보면서 공부한 알고리즘은 다음과 같다.
가장 작은 수를 smallest, 두번째로 작은수를 sec_smallest 라 하자.
그럼 두가지 경우로 나누어 생각할수있다.
1) 입력된 숫자 N이 있을때 그 수가 가장 작은 수인 smallest보다 작은 경우.
이렇게되면 N->smallest자리에 smallest->sec_smallest에 들어가게된다.
if(N<smallest){
sec_smallest=smallest;
smallest=N;
}
2)그리고 입력된 숫자 N이, smallest보다는 크지만 sec_smallest보다는 작은 경우가 있다.
이 경우는 단순하게 N->sec_smallest의 자리에 가면 된다.
else if(N<sec_smallest){ // smallest<N<sec_smallest
sec_smallest=N;
}
위와같은 핵심 알고리즘을 통해 완성된 코드는 다음과 같다
#pragma warning (disable:4996)
#include <stdio.h>
/* 소문자를 입력받아서 알파벳 순서로 가장 빠른 문자와, 그 다음으로 빠른 문자 출력하기 */
/* 두 가지 케이스로 나누어서 푼다
1.입력받은수가 가장 작은수보다 작다면
2.입력받은수가 가장 작은수보단 크고 두번째 작은수보단 작다면?*/
int main() {
char smallest_ch1 = 'z'; //가장 빠른
char smallest_ch2 = 'z';//두번째로 빠른
char ch;
scanf("%c", &ch);
while (1) {
if ('a' <= ch && ch <= 'z') {
if (ch < smallest_ch1) {
smallest_ch2 = smallest_ch1;
smallest_ch1 = ch;
}
else if (ch < smallest_ch2) {
smallest_ch2 = ch;
}
}
else break;
scanf("%c", &ch);
}
printf("%c%c", smallest_ch1, smallest_ch2);
return 0;
}
'지난 학기들의 기록 > C 기초' 카테고리의 다른 글
[C실습] 배열 유형 분석 2- N개의 정수배열에서 M개의 칸씩 위치옮기기 (0) | 2020.05.31 |
---|---|
[C실습] 배열 유형 분석 1- N개의 정수배열에서 M개씩 그룹지어 비교하기(+추가) (2) | 2020.05.31 |
[C실습] 배열 실습문제 11~13번 풀이 (0) | 2020.05.21 |
[C언어] 범위가 지정된 난수생성 : a~b 범위의 난수를 생성하라 (0) | 2020.05.11 |
[C실습]소수와 다음 소수 출력하기 (0) | 2020.05.10 |
댓글