2025년, 코딩은 선택이 아닌 필수!

2025년 모든 학교에서 코딩이 시작 됩니다. 먼저 준비하는 사람만이 기술을 선도해 갑니다~

강의자료/정보영재

2017년 지역대회 고등부 27번 문제 풀이

원당컴퓨터학원 2018. 4. 4. 09:21

이제 지역대회가 몇일 남지 않았네요...

그동안 지역대회를 준비한 학생들도 고생 많이 했구요...


지역대회를 위해 마지막까지 열심히 공부하고 있는 학생들에게도 응원의 메시지를 보냅니다.


오늘은 2017년 지역대회 고등부 27번 문제를 같이 풀어 보도록 하겠습니다.



이러한 프로그래밍 문제를 처음 접하게 되면 학생들은 자신의 코드가 아니다 보니 남의 코드를 보는 것을 대체로 싫어하는 경향이 있더라구요.


특히나 머리가 좋은 학생일 수록... 같은 문제를 자신의 스타일을 고집하다 보니 더더욱 다른 사람의 코드를 보는 것을 귀찮아 하는 경향이 두드러 지더라구요.


그러기는 해도 일단 지역대회를 통과해야만 전국대회에서 자신의 코드를 구현해 볼 수 있는 기회가 되다 보니...

귀찮아도 남의 코드를 보는 습관을 기르는 것이 좋을것 같기는 합니다.


일단 이러한 배열 문제가 나오면 저 같은 경우에는 무조건 그림을 먼저 그려 보게 됩니다.

소스로만 볼때와 그림을 그렸을때와 소스가 하는 역할이 훨씬 더 잘 보이거든요.


a 배열을 다음과 같이 주소값과 데이터값을 입력해서 그림을 그려 봅니다.




이때 i는 0번지 부터 9번지까지 이동을 하게 되고 

j는 i+1 번지 부터 9번지까지 이동을 하게 되네요...


if (a[i] < a[j]){

 t = a[i];

 a[i] = a[j];

 a[j] = t;

}


이 부분에서는 i가 0 번지 일때 j는 1번지 부터 9번지까지 이동을 하면서 0번지 값보다 큰값이 있으면 교환을 하네요.

i가 1번지 일때는 j가 2번지 부터 9번지까지 모두 훑으면서 1번지 값보다 큰 값이 있으면 교환을 하고요.


이렇게 그림을 그려 보니 갈수록 작아지는 내림차순을 하는 선택정렬 프로그램 이었네요...


사실 이런 문제는 기출문제를 여러 회차를 풀다 보면  

if (a[i] < a[j]){

 t = a[i];

 a[i] = a[j];

 a[j] = t;

}


이러한 유형의 코드만 확인해도 직감적으로 정렬 프로그램이구나 하는것을 알게 되거든요.


하지만 요즘에는 코드 형태만 보고서 바로 계산 하는 순간 또 다른 함정이 있는 경우가 많아서 정확히 하나 하나를 모두 돌려 보는 경우가 가장 안전하기는 한것 같습니다.


27번 문제 같은 경우는 선택정렬의 가장 기본적인 형태라서 초,중,고생 모두 어렵지 않게 풀수 있었던 문제였던것 같네요.


정답을 확인해 보면

a 배열값이 97,89,59,48,30,21,17,16,16,12 과 같이 내림차순 정렬이 되고 여기에서 0번지 부터 4번지까지의 5개의 합을 출력하는 문제입니다.

97 + 89 + 59 + 48 + 30 = 323 이 나오는 것을 확인 할 수가 있었습니다.


하지만 배열을 처음 접하는 학생들은 아무래도 머리속에 그림을 그리려고 하다 보니 실수를 하는 경우가 간혹 있어서...

저희 원생들에게는 될수 있으면 작은것 하나도 그림을 그리도록 이야기는 하고 있는데...^^


학생들이 그림 그리는 것을 무척이나 귀찮아 하는 것 같네요.^^


이번 지역대회에서 그동안 고생한 보람을 찾았으면 좋겠다는 생각을 해 보게 되네요.^^


정보올림피아드 문제 풀이 리스트 정리


사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기