강의실/정보영재

알고리즘을 하는 학생들이라면 정보올림피아드에 출전하여 전국대회에서 수상하는 것은 참으로 큰 의미있는 대회라고 생각 하고 있습니다.(정보올림피아드 준비 해 준 모든 학생들에게 고생했다는 이야기를 먼저 해 주고 싶습니다.^^)


저희 원에서도 올해 도전한 학생들이 있었는데 아쉽게 시도대회 장려로 끝난 사례가 있어서...

정말로 전국대회의 벽은 높고도 높다는 생각을 많이 하게 된 계기가 되었는데요...

중학생인 경우는 1년 준비해서 전국대회 가는 것이 많이 버겁구나 하는 것을 느끼기도 했구요...

또한 제가 많이 부족하구나 하는것도 깨닫게 되었네요.


그래도 내년에는 중3 학생들이 졸업을 하니까...

그리고 또 일년간 더 쌓아온 내공이 있으니까...

내년에는 꼭 전국대회 갈수 있을거라 생각을 하고 있답니다.


오늘은 지난 7월 20일에 전국대회를 치른 문제중에서 가장 기본이 되는 초등1번문제 딱지놀이 문제를 풀어 보았습니다.


문제는 http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2377&sca=60&s1=&s2=&s3=&s4= 

정올 사이트를 참고해 주시면 좋겠습니다.


문제 요약을 하면 다음과 같습니다.


 

● 만약 두 딱지의 별의 개수가 다르다면, 별이 많은 쪽의 딱지가 이긴다.
● 별의 개수가 같고 동그라미의 개수가 다르다면, 동그라미가 많은 쪽의 딱지가 이긴다.
● 별, 동그라미의 개수가 각각 같고 네모의 개수가 다르다면, 네모가 많은 쪽의 딱지가 이긴다.
● 별, 동그라미, 네모의 개수가 각각 같고 세모의 개수가 다르다면, 세모가 많은 쪽의 딱지가 이긴다.
● 별, 동그라미, 네모, 세모의 개수가 각각 모두 같다면 무승부이다.


별, 동그라미, 네모, 세모를 각각 숫자 4, 3, 2, 1로 표현한다. 


 [Copy]
5
1 4 
4 3 3 2 1
5 2 4 3 2 1 
4 4 3 3 1
4 3 2 1 1 
4 2 3 2 1
4 4 3 2 1
3 4 3 2
5 4 4 2 3 1
5 4 2 4 1 3
 [Copy]
A
B
B
A
D



입력 예에서 5 개의 데이터를 입력 받고 있구요...

A는 1개 그림만 나왔는데 1개 그림이 4(별) 이라는 얘기구요.

B는 4개 그림이 나왔는데 3(동그라미),3(동그라미),2(네모),1(세모) 의 그림이 나왔다는 얘기 입니다.


이렇게 쌍이 5개로 나누어져서 출력 예제는 5개가 나오는 것입니다.


문제는 다음과 같이 풀어 보았습니다.



/**************************************************************
    Problem: 3072
    User: icon001
    Language: C++
    Result: Success
    Time:19 ms
    Memory:1740 kb
****************************************************************/
 
 
#include <iostream>
#include <stdio.h>
 
using namespace std;
 
int main()
{
    int n;
    //freopen("input.txt","r",stdin);
    scanf("%d",&n);
 
    for(int i = 0;i<n;i++)
    {
        int an,bn,temp;
        int aImage[5]={0,}; //a그림 갯수
        int bImage[5]={0,}; //b그림 갯수
        scanf("%d",&an);//a의 갯수를 입력 받자.
        for(int j=0;j<an;j++)
        {
            scanf("%d",&temp);
            aImage[temp]++; //그림 갯수를 입력 하자
        }
        scanf("%d",&bn);//a의 갯수를 입력 받자.
        for(int j=0;j<bn;j++)
        {
            scanf("%d",&temp);
            bImage[temp]++; //그림 갯수를 입력 하자
        }
 
        int flag=0;
        for(int j=4;j>0;j--) //4점짜리 별부터 체크 하면서 같으면 그 다음 체크 다르면 이긴 사람 출력
        {
            if(aImage[j]==bImage[j]) continue; //같으면 다음 체크
            if(aImage[j]>bImage[j])
            {
                flag=1;
                printf("A\n");
                break;
            } else
            {
                flag=1;
                printf("B\n");
                break;
            }
        }
        if(flag==0) //무승부이다.
        {
            printf("D\n");
        }
 
    }
    return 0;
}

 



A 그림의 번호를 입력 받으면서 aImage[그림번호] 위치를 카운터 증가 했구요.

B 그림의 번호를 입력 받으면서 bImage[그림번호] 위치를 카운터 증가 했습니다.


그리고 4번째 그림부터 앞으로 나오면서 나온 갯수를 비교해서.

4번째 그림이 많은 것을 승자 같으면 3번째 꺼 비교... 이런식으로 비교했습니다.


가장 기본적인 알고리즘에 속하는 문제 유형이었습니다.




이 장소를 Daum지도에서 확인해보세요.
인천 서구 당하동 1028-2 장원프라자 502호 | 원당컴퓨터학원
도움말 Daum 지도
6 0
  • 생명마루한의원 2017.08.22 18:21 신고    

    저녁 식사 맛있게 하세요~~^^

  • 버블프라이스 2017.08.23 05:13 신고    

    본선 문제풀이를 해주셨네요?
    정보올림피아드 전국대회에 참가하는 학생분들께 많은 도움이 될 것 같습니다.
    상큼한 수요일 되시길 바래요-

    • 원당컴 2017.08.23 19:04 신고  

      감사합니다.^^ 수요일이 상큼했습니다.^^

  • 핑구야 날자 2017.08.23 08:02 신고    

    우승한 것은 상당한 경력이 되겠지요 좋은 숙제 아이들에게 도움이 많이 될 것 같아요

    • 원당컴 2017.08.23 19:05 신고  

      알고리즘 준비하는 학생들에게는 전국대회 진출만으로도 큰 의미가 있는 대회 입니다.^^ 감사합니다.