영어 시험 성적이 80점 이상인 학생들의 수(CNT)를 구하는 알고리즘 i > 100은 처리한 학생이 아닌 처리할 학생을 검사하는 것이다.
JUMSU : 100명 학생들의 영어 점수 보관하는 배열 변수 i : 첫 번째 학생에 대한 인덱스 변수 값은 1 CNT : 영어 점수가 80점 이상인 학생들의 수
최댓값과 최솟값
영어 시험 만점 학생들 중 가장 높은 수학 시험 점수를 가지고 있는 학생의 수학 점수(M) 출력 두 조건을 만족해야 함: 영어 점수가 만점인지 + 수학 점수가 최고점 영어가 만점이고 수학 점수가 최고점인 조건을 만족해야 변수 M을 최고 수학점수로 갱신 한다. 조건을 만족하지 못 하면 bypass가 일어난다.
2차시 합계평균-소수판별 알고리즘
합계와 평균
SUM / N = Avg 일일 통화 시간이 200초 이하 -> 무료 서비스, 총 통화시간에서 제외, 평균 통화시간을 산정하는 과정에서 제외 200초 이상 -> 총 통화시간 포함, 평균 통화시간 산정하는 과정에서 포함 매일(i)의 통화시간은 T(i)에 저장
T(1)부터 통화시간이 200초를 넘는지 조사(T(i)>200) 200초를 넘으면 Sum변수에 누적, 통화시간 누적에 참여한 날(N)에 1을 누적한 후 인덱스 i를 1 증가시켜 다음 날로 이동 넘지 않으면 인덱스 i를 1 증가시켜 그 다음날 T(2)로 이동 이 과정을 반복한 후 30일 모두 처리했으면 Avg = Sum / N을 계산하여 Avg 출력
소수 판별
소수란? 1과 자기 자신 이외의 수로는 나누어 떨어지지 않는 1보다 큰 자연수
만일 자연수 N이 소수라면, 2부터 N의 제곱근까지의 자연수들 중에서 N을 나누어 떨어지게 하는 수는 존재하지 않음
P : 1~100의 소수 중 가장 큰 소수, 자연수 중 가장 작은 소수가 2라서 초기 값은 2다. N : 3~100까지의 조사할 자연수 M : N의 제곱근 R : MOD(N,i) <- "만일 자연수 N이 소수라면, 2부터 N의 제곱근까지의 자연수들 중에서 N을 나누어 떨어지게 하는 수는 존재하지 않음" 활용 i : 자연수 N을 2부터 M까지 나눌 때, 2부터 M까지의 수 유지해주는 내부 반복용 변수
선언 기호는 육각형으로 PN(100)은 선언이 아니라 start 대신 알고리즘 이름을 쓴 것이다. 효율성을 위해 N이 아닌 루트 N까지 진행한다.
3차시 소인수 분해-공배수 알고리즘
소인수 분해
자연수 N을 입력받아 N = 1이 될 때까지 소인수 분해하는 과정을 반복하여 결과 출력하는 알고리즘 문제 N은 1000 이하의 자연수라 가정 N이 2보다 작으면 알고리즘 종료, N이 소수이면 '소수'라고 출력, N이 소수가 아니면 소인수 분해 결과 출력 단계별로 소인수 분해한 결과를 배열에 저장해두었다가 나중에 한꺼번에 출력
A: 약수들을 저장하는 배열 변수(인덱스로 첨자용 변수 T 사용) T : 분해한 소인수들을 저장할 배열의 첨자용 변수(약수의 개수, 1이면 자기 자신밖에 없는 것이다) P : N을 나누는 수 J : 소인수 분해한 결과 출력 시 사용할 반복용 변수
배수와 공배수
3과 4의 공배수: MOD(A,3) = 0 And MOD(A,4) = 0 또는 MOD(A,3) + MOD(A,4) = 0
위 알고리즘에서 N = 0 은 N3=0 AND N4=0으로 변경 가능
N3 : A(i) 값을 3으로 나누었을 때의 나머지 보관하는 변수 N4 : A(i) 값을 4으로 나누었을 때의 나머지 보관하는 변수 CNT : 3의 배수면서 동시에 4의 배수인 값 개수 변수 N은 N3, N4 모두 나머지가 0이 되어야(나머지가 0이 되는 경우는 N3이 3의 배수 / N4는 4의 배수) 0이 될 수 있으므로 N이 0이 되는 경우에만 CNT가 1 증가하게 됨